1 | //===-- ArgsTest.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 | #include "lldb/Interpreter/OptionArgParser.h" |
11 | #include "llvm/Support/Error.h" |
12 | |
13 | using namespace lldb_private; |
14 | |
15 | TEST(OptionArgParserTest, toBoolean) { |
16 | bool success = false; |
17 | EXPECT_TRUE( |
18 | OptionArgParser::ToBoolean(llvm::StringRef("true" ), false, nullptr)); |
19 | EXPECT_TRUE( |
20 | OptionArgParser::ToBoolean(llvm::StringRef("on" ), false, nullptr)); |
21 | EXPECT_TRUE( |
22 | OptionArgParser::ToBoolean(llvm::StringRef("yes" ), false, nullptr)); |
23 | EXPECT_TRUE(OptionArgParser::ToBoolean(llvm::StringRef("1" ), false, nullptr)); |
24 | |
25 | EXPECT_TRUE( |
26 | OptionArgParser::ToBoolean(llvm::StringRef("true" ), false, &success)); |
27 | EXPECT_TRUE(success); |
28 | EXPECT_TRUE( |
29 | OptionArgParser::ToBoolean(llvm::StringRef("on" ), false, &success)); |
30 | EXPECT_TRUE(success); |
31 | EXPECT_TRUE( |
32 | OptionArgParser::ToBoolean(llvm::StringRef("yes" ), false, &success)); |
33 | EXPECT_TRUE(success); |
34 | EXPECT_TRUE( |
35 | OptionArgParser::ToBoolean(llvm::StringRef("1" ), false, &success)); |
36 | EXPECT_TRUE(success); |
37 | |
38 | EXPECT_FALSE( |
39 | OptionArgParser::ToBoolean(llvm::StringRef("false" ), true, nullptr)); |
40 | EXPECT_FALSE( |
41 | OptionArgParser::ToBoolean(llvm::StringRef("off" ), true, nullptr)); |
42 | EXPECT_FALSE( |
43 | OptionArgParser::ToBoolean(llvm::StringRef("no" ), true, nullptr)); |
44 | EXPECT_FALSE(OptionArgParser::ToBoolean(llvm::StringRef("0" ), true, nullptr)); |
45 | |
46 | EXPECT_FALSE( |
47 | OptionArgParser::ToBoolean(llvm::StringRef("false" ), true, &success)); |
48 | EXPECT_TRUE(success); |
49 | EXPECT_FALSE( |
50 | OptionArgParser::ToBoolean(llvm::StringRef("off" ), true, &success)); |
51 | EXPECT_TRUE(success); |
52 | EXPECT_FALSE( |
53 | OptionArgParser::ToBoolean(llvm::StringRef("no" ), true, &success)); |
54 | EXPECT_TRUE(success); |
55 | EXPECT_FALSE( |
56 | OptionArgParser::ToBoolean(llvm::StringRef("0" ), true, &success)); |
57 | EXPECT_TRUE(success); |
58 | |
59 | EXPECT_FALSE( |
60 | OptionArgParser::ToBoolean(llvm::StringRef("10" ), false, &success)); |
61 | EXPECT_FALSE(success); |
62 | EXPECT_TRUE( |
63 | OptionArgParser::ToBoolean(llvm::StringRef("10" ), true, &success)); |
64 | EXPECT_FALSE(success); |
65 | EXPECT_TRUE(OptionArgParser::ToBoolean(llvm::StringRef("" ), true, &success)); |
66 | EXPECT_FALSE(success); |
67 | } |
68 | |
69 | void TestToBooleanWithExpectedBool(llvm::StringRef option_arg, |
70 | bool expected_parse_success, |
71 | bool expected_result) { |
72 | llvm::Expected<bool> bool_or_error = |
73 | OptionArgParser::ToBoolean(option_name: llvm::StringRef("test_option" ), option_arg); |
74 | EXPECT_EQ(expected_parse_success, (bool)bool_or_error); |
75 | if (expected_parse_success) |
76 | EXPECT_EQ(expected_result, *bool_or_error); |
77 | else { |
78 | std::string error = llvm::toString(E: bool_or_error.takeError()); |
79 | EXPECT_NE(std::string::npos, error.find("test_option" )); |
80 | } |
81 | } |
82 | |
83 | TEST(OptionArgParserTest, toBooleanWithExpectedBool) { |
84 | TestToBooleanWithExpectedBool(option_arg: llvm::StringRef("true" ), expected_parse_success: true, expected_result: true); |
85 | TestToBooleanWithExpectedBool(option_arg: llvm::StringRef("on" ), expected_parse_success: true, expected_result: true); |
86 | TestToBooleanWithExpectedBool(option_arg: llvm::StringRef("yes" ), expected_parse_success: true, expected_result: true); |
87 | TestToBooleanWithExpectedBool(option_arg: llvm::StringRef("1" ), expected_parse_success: true, expected_result: true); |
88 | |
89 | TestToBooleanWithExpectedBool(option_arg: llvm::StringRef("True" ), expected_parse_success: true, expected_result: true); |
90 | TestToBooleanWithExpectedBool(option_arg: llvm::StringRef("On" ), expected_parse_success: true, expected_result: true); |
91 | TestToBooleanWithExpectedBool(option_arg: llvm::StringRef("Yes" ), expected_parse_success: true, expected_result: true); |
92 | |
93 | TestToBooleanWithExpectedBool(option_arg: llvm::StringRef("false" ), expected_parse_success: true, expected_result: false); |
94 | TestToBooleanWithExpectedBool(option_arg: llvm::StringRef("off" ), expected_parse_success: true, expected_result: false); |
95 | TestToBooleanWithExpectedBool(option_arg: llvm::StringRef("no" ), expected_parse_success: true, expected_result: false); |
96 | TestToBooleanWithExpectedBool(option_arg: llvm::StringRef("0" ), expected_parse_success: true, expected_result: false); |
97 | |
98 | TestToBooleanWithExpectedBool(option_arg: llvm::StringRef("False" ), expected_parse_success: true, expected_result: false); |
99 | TestToBooleanWithExpectedBool(option_arg: llvm::StringRef("Off" ), expected_parse_success: true, expected_result: false); |
100 | TestToBooleanWithExpectedBool(option_arg: llvm::StringRef("No" ), expected_parse_success: true, expected_result: false); |
101 | |
102 | TestToBooleanWithExpectedBool(option_arg: llvm::StringRef("10" ), expected_parse_success: false, |
103 | expected_result: false /* doesn't matter */); |
104 | TestToBooleanWithExpectedBool(option_arg: llvm::StringRef("" ), expected_parse_success: false, |
105 | expected_result: false /* doesn't matter */); |
106 | } |
107 | |
108 | TEST(OptionArgParserTest, toChar) { |
109 | bool success = false; |
110 | |
111 | EXPECT_EQ('A', OptionArgParser::ToChar("A" , 'B', nullptr)); |
112 | EXPECT_EQ('B', OptionArgParser::ToChar("B" , 'A', nullptr)); |
113 | |
114 | EXPECT_EQ('A', OptionArgParser::ToChar("A" , 'B', &success)); |
115 | EXPECT_TRUE(success); |
116 | EXPECT_EQ('B', OptionArgParser::ToChar("B" , 'A', &success)); |
117 | EXPECT_TRUE(success); |
118 | |
119 | EXPECT_EQ('A', OptionArgParser::ToChar("" , 'A', &success)); |
120 | EXPECT_FALSE(success); |
121 | EXPECT_EQ('A', OptionArgParser::ToChar("ABC" , 'A', &success)); |
122 | EXPECT_FALSE(success); |
123 | } |
124 | |
125 | TEST(OptionArgParserTest, toScriptLanguage) { |
126 | bool success = false; |
127 | |
128 | EXPECT_EQ(lldb::eScriptLanguageDefault, |
129 | OptionArgParser::ToScriptLanguage(llvm::StringRef("default" ), |
130 | lldb::eScriptLanguageNone, |
131 | nullptr)); |
132 | EXPECT_EQ(lldb::eScriptLanguagePython, |
133 | OptionArgParser::ToScriptLanguage( |
134 | llvm::StringRef("python" ), lldb::eScriptLanguageNone, nullptr)); |
135 | EXPECT_EQ(lldb::eScriptLanguageNone, |
136 | OptionArgParser::ToScriptLanguage( |
137 | llvm::StringRef("none" ), lldb::eScriptLanguagePython, nullptr)); |
138 | |
139 | EXPECT_EQ(lldb::eScriptLanguageDefault, |
140 | OptionArgParser::ToScriptLanguage(llvm::StringRef("default" ), |
141 | lldb::eScriptLanguageNone, |
142 | &success)); |
143 | EXPECT_TRUE(success); |
144 | EXPECT_EQ(lldb::eScriptLanguagePython, |
145 | OptionArgParser::ToScriptLanguage(llvm::StringRef("python" ), |
146 | lldb::eScriptLanguageNone, |
147 | &success)); |
148 | EXPECT_TRUE(success); |
149 | EXPECT_EQ(lldb::eScriptLanguageNone, |
150 | OptionArgParser::ToScriptLanguage(llvm::StringRef("none" ), |
151 | lldb::eScriptLanguagePython, |
152 | &success)); |
153 | EXPECT_TRUE(success); |
154 | |
155 | EXPECT_EQ(lldb::eScriptLanguagePython, |
156 | OptionArgParser::ToScriptLanguage(llvm::StringRef("invalid" ), |
157 | lldb::eScriptLanguagePython, |
158 | &success)); |
159 | EXPECT_FALSE(success); |
160 | } |
161 | |