1 | //===-- OptionsWithRawTest.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-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | #include "gtest/gtest.h" |
10 | |
11 | #include "lldb/Utility/Args.h" |
12 | #include "lldb/Utility/StringList.h" |
13 | |
14 | using namespace lldb_private; |
15 | |
16 | TEST(OptionsWithRawTest, EmptyInput) { |
17 | // An empty string is just an empty suffix without any arguments. |
18 | OptionsWithRaw args("" ); |
19 | ASSERT_FALSE(args.HasArgs()); |
20 | ASSERT_STREQ(args.GetRawPart().c_str(), "" ); |
21 | } |
22 | |
23 | TEST(OptionsWithRawTest, SingleWhitespaceInput) { |
24 | // Only whitespace is just a suffix. |
25 | OptionsWithRaw args(" " ); |
26 | ASSERT_FALSE(args.HasArgs()); |
27 | ASSERT_STREQ(args.GetRawPart().c_str(), " " ); |
28 | } |
29 | |
30 | TEST(OptionsWithRawTest, WhitespaceInput) { |
31 | // Only whitespace is just a suffix. |
32 | OptionsWithRaw args(" " ); |
33 | ASSERT_FALSE(args.HasArgs()); |
34 | ASSERT_STREQ(args.GetRawPart().c_str(), " " ); |
35 | } |
36 | |
37 | TEST(OptionsWithRawTest, ArgsButNoDelimiter) { |
38 | // This counts as a suffix because there is no -- at the end. |
39 | OptionsWithRaw args("-foo bar" ); |
40 | ASSERT_FALSE(args.HasArgs()); |
41 | ASSERT_STREQ(args.GetRawPart().c_str(), "-foo bar" ); |
42 | } |
43 | |
44 | TEST(OptionsWithRawTest, ArgsButNoLeadingDash) { |
45 | // No leading dash means we have no arguments. |
46 | OptionsWithRaw args("foo bar --" ); |
47 | ASSERT_FALSE(args.HasArgs()); |
48 | ASSERT_STREQ(args.GetRawPart().c_str(), "foo bar --" ); |
49 | } |
50 | |
51 | TEST(OptionsWithRawTest, QuotedSuffix) { |
52 | // We need to have a way to escape the -- to make it usable as an argument. |
53 | OptionsWithRaw args("-foo \"--\" bar" ); |
54 | ASSERT_FALSE(args.HasArgs()); |
55 | ASSERT_STREQ(args.GetRawPart().c_str(), "-foo \"--\" bar" ); |
56 | } |
57 | |
58 | TEST(OptionsWithRawTest, EmptySuffix) { |
59 | // An empty suffix with arguments. |
60 | OptionsWithRaw args("-foo --" ); |
61 | ASSERT_TRUE(args.HasArgs()); |
62 | ASSERT_EQ(args.GetArgString(), "-foo " ); |
63 | ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo --" ); |
64 | |
65 | auto ref = args.GetArgs().GetArgumentArrayRef(); |
66 | ASSERT_EQ(1u, ref.size()); |
67 | EXPECT_STREQ("-foo" , ref[0]); |
68 | |
69 | ASSERT_STREQ(args.GetRawPart().c_str(), "" ); |
70 | } |
71 | |
72 | TEST(OptionsWithRawTest, EmptySuffixSingleWhitespace) { |
73 | // A single whitespace also countas as an empty suffix (because that usually |
74 | // separates the suffix from the double dash. |
75 | OptionsWithRaw args("-foo -- " ); |
76 | ASSERT_TRUE(args.HasArgs()); |
77 | ASSERT_EQ(args.GetArgString(), "-foo " ); |
78 | ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- " ); |
79 | |
80 | auto ref = args.GetArgs().GetArgumentArrayRef(); |
81 | ASSERT_EQ(1u, ref.size()); |
82 | EXPECT_STREQ("-foo" , ref[0]); |
83 | |
84 | ASSERT_STREQ(args.GetRawPart().c_str(), "" ); |
85 | } |
86 | |
87 | TEST(OptionsWithRawTest, WhitespaceSuffix) { |
88 | // A single whtiespace character as a suffix. |
89 | OptionsWithRaw args("-foo -- " ); |
90 | ASSERT_TRUE(args.HasArgs()); |
91 | ASSERT_EQ(args.GetArgString(), "-foo " ); |
92 | ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- " ); |
93 | |
94 | auto ref = args.GetArgs().GetArgumentArrayRef(); |
95 | ASSERT_EQ(1u, ref.size()); |
96 | EXPECT_STREQ("-foo" , ref[0]); |
97 | |
98 | ASSERT_STREQ(args.GetRawPart().c_str(), " " ); |
99 | } |
100 | |
101 | TEST(OptionsWithRawTest, LeadingSpaceArgs) { |
102 | // Whitespace before the first dash needs to be ignored. |
103 | OptionsWithRaw args(" -foo -- bar" ); |
104 | ASSERT_TRUE(args.HasArgs()); |
105 | ASSERT_EQ(args.GetArgString(), " -foo " ); |
106 | ASSERT_EQ(args.GetArgStringWithDelimiter(), " -foo -- " ); |
107 | |
108 | auto ref = args.GetArgs().GetArgumentArrayRef(); |
109 | ASSERT_EQ(1u, ref.size()); |
110 | EXPECT_STREQ("-foo" , ref[0]); |
111 | |
112 | ASSERT_STREQ(args.GetRawPart().c_str(), "bar" ); |
113 | } |
114 | |
115 | TEST(OptionsWithRawTest, SingleWordSuffix) { |
116 | // A single word as a suffix. |
117 | OptionsWithRaw args("-foo -- bar" ); |
118 | ASSERT_TRUE(args.HasArgs()); |
119 | ASSERT_EQ(args.GetArgString(), "-foo " ); |
120 | ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- " ); |
121 | |
122 | auto ref = args.GetArgs().GetArgumentArrayRef(); |
123 | ASSERT_EQ(1u, ref.size()); |
124 | EXPECT_STREQ("-foo" , ref[0]); |
125 | |
126 | ASSERT_STREQ(args.GetRawPart().c_str(), "bar" ); |
127 | } |
128 | |
129 | TEST(OptionsWithRawTest, MultiWordSuffix) { |
130 | // Multiple words as a suffix. |
131 | OptionsWithRaw args("-foo -- bar baz" ); |
132 | ASSERT_TRUE(args.HasArgs()); |
133 | ASSERT_EQ(args.GetArgString(), "-foo " ); |
134 | ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- " ); |
135 | |
136 | auto ref = args.GetArgs().GetArgumentArrayRef(); |
137 | ASSERT_EQ(1u, ref.size()); |
138 | EXPECT_STREQ("-foo" , ref[0]); |
139 | |
140 | ASSERT_STREQ(args.GetRawPart().c_str(), "bar baz" ); |
141 | } |
142 | |
143 | TEST(OptionsWithRawTest, UnterminatedQuote) { |
144 | // A quote character in the suffix shouldn't influence the parsing. |
145 | OptionsWithRaw args("-foo -- bar \" " ); |
146 | ASSERT_TRUE(args.HasArgs()); |
147 | ASSERT_EQ(args.GetArgString(), "-foo " ); |
148 | ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- " ); |
149 | |
150 | auto ref = args.GetArgs().GetArgumentArrayRef(); |
151 | ASSERT_EQ(1u, ref.size()); |
152 | EXPECT_STREQ("-foo" , ref[0]); |
153 | |
154 | ASSERT_STREQ(args.GetRawPart().c_str(), "bar \" " ); |
155 | } |
156 | |
157 | TEST(OptionsWithRawTest, TerminatedQuote) { |
158 | // A part of the suffix is quoted, which shouldn't influence the parsing. |
159 | OptionsWithRaw args("-foo -- bar \"a\" " ); |
160 | ASSERT_TRUE(args.HasArgs()); |
161 | ASSERT_EQ(args.GetArgString(), "-foo " ); |
162 | ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- " ); |
163 | |
164 | auto ref = args.GetArgs().GetArgumentArrayRef(); |
165 | ASSERT_EQ(1u, ref.size()); |
166 | EXPECT_STREQ("-foo" , ref[0]); |
167 | |
168 | ASSERT_STREQ(args.GetRawPart().c_str(), "bar \"a\" " ); |
169 | } |
170 | |
171 | TEST(OptionsWithRawTest, EmptyArgsOnlySuffix) { |
172 | // Empty argument list, but we have a suffix. |
173 | OptionsWithRaw args("-- bar" ); |
174 | ASSERT_TRUE(args.HasArgs()); |
175 | ASSERT_EQ(args.GetArgString(), "" ); |
176 | ASSERT_EQ(args.GetArgStringWithDelimiter(), "-- " ); |
177 | |
178 | auto ref = args.GetArgs().GetArgumentArrayRef(); |
179 | ASSERT_EQ(0u, ref.size()); |
180 | |
181 | ASSERT_STREQ(args.GetRawPart().c_str(), "bar" ); |
182 | } |
183 | |