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
13using namespace lldb_private;
14
15TEST(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
69void 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
83TEST(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
108TEST(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
125TEST(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

source code of lldb/unittests/Interpreter/TestOptionArgParser.cpp