180814287SRaphael Isemann //===-- ArgsTest.cpp ------------------------------------------------------===//
247cbf4a0SPavel Labath //
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
647cbf4a0SPavel Labath //
747cbf4a0SPavel Labath //===----------------------------------------------------------------------===//
847cbf4a0SPavel Labath
947cbf4a0SPavel Labath #include "gtest/gtest.h"
1047cbf4a0SPavel Labath #include "lldb/Interpreter/OptionArgParser.h"
11*70f41a8cSroyitaqi #include "llvm/Support/Error.h"
1247cbf4a0SPavel Labath
1347cbf4a0SPavel Labath using namespace lldb_private;
1447cbf4a0SPavel Labath
TEST(OptionArgParserTest,toBoolean)1547cbf4a0SPavel Labath TEST(OptionArgParserTest, toBoolean) {
1647cbf4a0SPavel Labath bool success = false;
1747cbf4a0SPavel Labath EXPECT_TRUE(
1847cbf4a0SPavel Labath OptionArgParser::ToBoolean(llvm::StringRef("true"), false, nullptr));
1947cbf4a0SPavel Labath EXPECT_TRUE(
2047cbf4a0SPavel Labath OptionArgParser::ToBoolean(llvm::StringRef("on"), false, nullptr));
2147cbf4a0SPavel Labath EXPECT_TRUE(
2247cbf4a0SPavel Labath OptionArgParser::ToBoolean(llvm::StringRef("yes"), false, nullptr));
2347cbf4a0SPavel Labath EXPECT_TRUE(OptionArgParser::ToBoolean(llvm::StringRef("1"), false, nullptr));
2447cbf4a0SPavel Labath
2547cbf4a0SPavel Labath EXPECT_TRUE(
2647cbf4a0SPavel Labath OptionArgParser::ToBoolean(llvm::StringRef("true"), false, &success));
2747cbf4a0SPavel Labath EXPECT_TRUE(success);
2847cbf4a0SPavel Labath EXPECT_TRUE(
2947cbf4a0SPavel Labath OptionArgParser::ToBoolean(llvm::StringRef("on"), false, &success));
3047cbf4a0SPavel Labath EXPECT_TRUE(success);
3147cbf4a0SPavel Labath EXPECT_TRUE(
3247cbf4a0SPavel Labath OptionArgParser::ToBoolean(llvm::StringRef("yes"), false, &success));
3347cbf4a0SPavel Labath EXPECT_TRUE(success);
3447cbf4a0SPavel Labath EXPECT_TRUE(
3547cbf4a0SPavel Labath OptionArgParser::ToBoolean(llvm::StringRef("1"), false, &success));
3647cbf4a0SPavel Labath EXPECT_TRUE(success);
3747cbf4a0SPavel Labath
3847cbf4a0SPavel Labath EXPECT_FALSE(
3947cbf4a0SPavel Labath OptionArgParser::ToBoolean(llvm::StringRef("false"), true, nullptr));
4047cbf4a0SPavel Labath EXPECT_FALSE(
4147cbf4a0SPavel Labath OptionArgParser::ToBoolean(llvm::StringRef("off"), true, nullptr));
4247cbf4a0SPavel Labath EXPECT_FALSE(
4347cbf4a0SPavel Labath OptionArgParser::ToBoolean(llvm::StringRef("no"), true, nullptr));
4447cbf4a0SPavel Labath EXPECT_FALSE(OptionArgParser::ToBoolean(llvm::StringRef("0"), true, nullptr));
4547cbf4a0SPavel Labath
4647cbf4a0SPavel Labath EXPECT_FALSE(
4747cbf4a0SPavel Labath OptionArgParser::ToBoolean(llvm::StringRef("false"), true, &success));
4847cbf4a0SPavel Labath EXPECT_TRUE(success);
4947cbf4a0SPavel Labath EXPECT_FALSE(
5047cbf4a0SPavel Labath OptionArgParser::ToBoolean(llvm::StringRef("off"), true, &success));
5147cbf4a0SPavel Labath EXPECT_TRUE(success);
5247cbf4a0SPavel Labath EXPECT_FALSE(
5347cbf4a0SPavel Labath OptionArgParser::ToBoolean(llvm::StringRef("no"), true, &success));
5447cbf4a0SPavel Labath EXPECT_TRUE(success);
5547cbf4a0SPavel Labath EXPECT_FALSE(
5647cbf4a0SPavel Labath OptionArgParser::ToBoolean(llvm::StringRef("0"), true, &success));
5747cbf4a0SPavel Labath EXPECT_TRUE(success);
5847cbf4a0SPavel Labath
5947cbf4a0SPavel Labath EXPECT_FALSE(
6047cbf4a0SPavel Labath OptionArgParser::ToBoolean(llvm::StringRef("10"), false, &success));
6147cbf4a0SPavel Labath EXPECT_FALSE(success);
6247cbf4a0SPavel Labath EXPECT_TRUE(
6347cbf4a0SPavel Labath OptionArgParser::ToBoolean(llvm::StringRef("10"), true, &success));
6447cbf4a0SPavel Labath EXPECT_FALSE(success);
6547cbf4a0SPavel Labath EXPECT_TRUE(OptionArgParser::ToBoolean(llvm::StringRef(""), true, &success));
6647cbf4a0SPavel Labath EXPECT_FALSE(success);
6747cbf4a0SPavel Labath }
6847cbf4a0SPavel Labath
TestToBooleanWithExpectedBool(llvm::StringRef option_arg,bool expected_parse_success,bool expected_result)69*70f41a8cSroyitaqi void TestToBooleanWithExpectedBool(llvm::StringRef option_arg,
70*70f41a8cSroyitaqi bool expected_parse_success,
71*70f41a8cSroyitaqi bool expected_result) {
72*70f41a8cSroyitaqi llvm::Expected<bool> bool_or_error =
73*70f41a8cSroyitaqi OptionArgParser::ToBoolean(llvm::StringRef("test_option"), option_arg);
74*70f41a8cSroyitaqi EXPECT_EQ(expected_parse_success, (bool)bool_or_error);
75*70f41a8cSroyitaqi if (expected_parse_success)
76*70f41a8cSroyitaqi EXPECT_EQ(expected_result, *bool_or_error);
77*70f41a8cSroyitaqi else {
78*70f41a8cSroyitaqi std::string error = llvm::toString(bool_or_error.takeError());
79*70f41a8cSroyitaqi EXPECT_NE(std::string::npos, error.find("test_option"));
80*70f41a8cSroyitaqi }
81*70f41a8cSroyitaqi }
82*70f41a8cSroyitaqi
TEST(OptionArgParserTest,toBooleanWithExpectedBool)83*70f41a8cSroyitaqi TEST(OptionArgParserTest, toBooleanWithExpectedBool) {
84*70f41a8cSroyitaqi TestToBooleanWithExpectedBool(llvm::StringRef("true"), true, true);
85*70f41a8cSroyitaqi TestToBooleanWithExpectedBool(llvm::StringRef("on"), true, true);
86*70f41a8cSroyitaqi TestToBooleanWithExpectedBool(llvm::StringRef("yes"), true, true);
87*70f41a8cSroyitaqi TestToBooleanWithExpectedBool(llvm::StringRef("1"), true, true);
88*70f41a8cSroyitaqi
89*70f41a8cSroyitaqi TestToBooleanWithExpectedBool(llvm::StringRef("True"), true, true);
90*70f41a8cSroyitaqi TestToBooleanWithExpectedBool(llvm::StringRef("On"), true, true);
91*70f41a8cSroyitaqi TestToBooleanWithExpectedBool(llvm::StringRef("Yes"), true, true);
92*70f41a8cSroyitaqi
93*70f41a8cSroyitaqi TestToBooleanWithExpectedBool(llvm::StringRef("false"), true, false);
94*70f41a8cSroyitaqi TestToBooleanWithExpectedBool(llvm::StringRef("off"), true, false);
95*70f41a8cSroyitaqi TestToBooleanWithExpectedBool(llvm::StringRef("no"), true, false);
96*70f41a8cSroyitaqi TestToBooleanWithExpectedBool(llvm::StringRef("0"), true, false);
97*70f41a8cSroyitaqi
98*70f41a8cSroyitaqi TestToBooleanWithExpectedBool(llvm::StringRef("False"), true, false);
99*70f41a8cSroyitaqi TestToBooleanWithExpectedBool(llvm::StringRef("Off"), true, false);
100*70f41a8cSroyitaqi TestToBooleanWithExpectedBool(llvm::StringRef("No"), true, false);
101*70f41a8cSroyitaqi
102*70f41a8cSroyitaqi TestToBooleanWithExpectedBool(llvm::StringRef("10"), false,
103*70f41a8cSroyitaqi false /* doesn't matter */);
104*70f41a8cSroyitaqi TestToBooleanWithExpectedBool(llvm::StringRef(""), false,
105*70f41a8cSroyitaqi false /* doesn't matter */);
106*70f41a8cSroyitaqi }
107*70f41a8cSroyitaqi
TEST(OptionArgParserTest,toChar)10847cbf4a0SPavel Labath TEST(OptionArgParserTest, toChar) {
10947cbf4a0SPavel Labath bool success = false;
11047cbf4a0SPavel Labath
11147cbf4a0SPavel Labath EXPECT_EQ('A', OptionArgParser::ToChar("A", 'B', nullptr));
11247cbf4a0SPavel Labath EXPECT_EQ('B', OptionArgParser::ToChar("B", 'A', nullptr));
11347cbf4a0SPavel Labath
11447cbf4a0SPavel Labath EXPECT_EQ('A', OptionArgParser::ToChar("A", 'B', &success));
11547cbf4a0SPavel Labath EXPECT_TRUE(success);
11647cbf4a0SPavel Labath EXPECT_EQ('B', OptionArgParser::ToChar("B", 'A', &success));
11747cbf4a0SPavel Labath EXPECT_TRUE(success);
11847cbf4a0SPavel Labath
11947cbf4a0SPavel Labath EXPECT_EQ('A', OptionArgParser::ToChar("", 'A', &success));
12047cbf4a0SPavel Labath EXPECT_FALSE(success);
12147cbf4a0SPavel Labath EXPECT_EQ('A', OptionArgParser::ToChar("ABC", 'A', &success));
12247cbf4a0SPavel Labath EXPECT_FALSE(success);
12347cbf4a0SPavel Labath }
12447cbf4a0SPavel Labath
TEST(OptionArgParserTest,toScriptLanguage)12547cbf4a0SPavel Labath TEST(OptionArgParserTest, toScriptLanguage) {
12647cbf4a0SPavel Labath bool success = false;
12747cbf4a0SPavel Labath
12847cbf4a0SPavel Labath EXPECT_EQ(lldb::eScriptLanguageDefault,
12947cbf4a0SPavel Labath OptionArgParser::ToScriptLanguage(llvm::StringRef("default"),
13047cbf4a0SPavel Labath lldb::eScriptLanguageNone,
13147cbf4a0SPavel Labath nullptr));
13247cbf4a0SPavel Labath EXPECT_EQ(lldb::eScriptLanguagePython,
13347cbf4a0SPavel Labath OptionArgParser::ToScriptLanguage(
13447cbf4a0SPavel Labath llvm::StringRef("python"), lldb::eScriptLanguageNone, nullptr));
13547cbf4a0SPavel Labath EXPECT_EQ(lldb::eScriptLanguageNone,
13647cbf4a0SPavel Labath OptionArgParser::ToScriptLanguage(
13747cbf4a0SPavel Labath llvm::StringRef("none"), lldb::eScriptLanguagePython, nullptr));
13847cbf4a0SPavel Labath
13947cbf4a0SPavel Labath EXPECT_EQ(lldb::eScriptLanguageDefault,
14047cbf4a0SPavel Labath OptionArgParser::ToScriptLanguage(llvm::StringRef("default"),
14147cbf4a0SPavel Labath lldb::eScriptLanguageNone,
14247cbf4a0SPavel Labath &success));
14347cbf4a0SPavel Labath EXPECT_TRUE(success);
14447cbf4a0SPavel Labath EXPECT_EQ(lldb::eScriptLanguagePython,
14547cbf4a0SPavel Labath OptionArgParser::ToScriptLanguage(llvm::StringRef("python"),
14647cbf4a0SPavel Labath lldb::eScriptLanguageNone,
14747cbf4a0SPavel Labath &success));
14847cbf4a0SPavel Labath EXPECT_TRUE(success);
14947cbf4a0SPavel Labath EXPECT_EQ(lldb::eScriptLanguageNone,
15047cbf4a0SPavel Labath OptionArgParser::ToScriptLanguage(llvm::StringRef("none"),
15147cbf4a0SPavel Labath lldb::eScriptLanguagePython,
15247cbf4a0SPavel Labath &success));
15347cbf4a0SPavel Labath EXPECT_TRUE(success);
15447cbf4a0SPavel Labath
15547cbf4a0SPavel Labath EXPECT_EQ(lldb::eScriptLanguagePython,
15647cbf4a0SPavel Labath OptionArgParser::ToScriptLanguage(llvm::StringRef("invalid"),
15747cbf4a0SPavel Labath lldb::eScriptLanguagePython,
15847cbf4a0SPavel Labath &success));
15947cbf4a0SPavel Labath EXPECT_FALSE(success);
16047cbf4a0SPavel Labath }
161