1 //===-- ArgsTest.cpp --------------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "gtest/gtest.h"
11 #include "lldb/Interpreter/OptionArgParser.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 TEST(OptionArgParserTest, toChar) {
70   bool success = false;
71 
72   EXPECT_EQ('A', OptionArgParser::ToChar("A", 'B', nullptr));
73   EXPECT_EQ('B', OptionArgParser::ToChar("B", 'A', nullptr));
74 
75   EXPECT_EQ('A', OptionArgParser::ToChar("A", 'B', &success));
76   EXPECT_TRUE(success);
77   EXPECT_EQ('B', OptionArgParser::ToChar("B", 'A', &success));
78   EXPECT_TRUE(success);
79 
80   EXPECT_EQ('A', OptionArgParser::ToChar("", 'A', &success));
81   EXPECT_FALSE(success);
82   EXPECT_EQ('A', OptionArgParser::ToChar("ABC", 'A', &success));
83   EXPECT_FALSE(success);
84 }
85 
86 TEST(OptionArgParserTest, toScriptLanguage) {
87   bool success = false;
88 
89   EXPECT_EQ(lldb::eScriptLanguageDefault,
90             OptionArgParser::ToScriptLanguage(llvm::StringRef("default"),
91                                               lldb::eScriptLanguageNone,
92                                               nullptr));
93   EXPECT_EQ(lldb::eScriptLanguagePython,
94             OptionArgParser::ToScriptLanguage(
95                 llvm::StringRef("python"), lldb::eScriptLanguageNone, nullptr));
96   EXPECT_EQ(lldb::eScriptLanguageNone,
97             OptionArgParser::ToScriptLanguage(
98                 llvm::StringRef("none"), lldb::eScriptLanguagePython, nullptr));
99 
100   EXPECT_EQ(lldb::eScriptLanguageDefault,
101             OptionArgParser::ToScriptLanguage(llvm::StringRef("default"),
102                                               lldb::eScriptLanguageNone,
103                                               &success));
104   EXPECT_TRUE(success);
105   EXPECT_EQ(lldb::eScriptLanguagePython,
106             OptionArgParser::ToScriptLanguage(llvm::StringRef("python"),
107                                               lldb::eScriptLanguageNone,
108                                               &success));
109   EXPECT_TRUE(success);
110   EXPECT_EQ(lldb::eScriptLanguageNone,
111             OptionArgParser::ToScriptLanguage(llvm::StringRef("none"),
112                                               lldb::eScriptLanguagePython,
113                                               &success));
114   EXPECT_TRUE(success);
115 
116   EXPECT_EQ(lldb::eScriptLanguagePython,
117             OptionArgParser::ToScriptLanguage(llvm::StringRef("invalid"),
118                                               lldb::eScriptLanguagePython,
119                                               &success));
120   EXPECT_FALSE(success);
121 }
122