xref: /llvm-project/lldb/unittests/API/SBCommandInterpreterTest.cpp (revision 27b6a4e63afe62f6258379a61177c67a670593c6)
1cea112f4SWalter Erquinigo //===-- SBCommandInterpreterTest.cpp ------------------------===----------===//
2cea112f4SWalter Erquinigo //
3cea112f4SWalter Erquinigo // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4cea112f4SWalter Erquinigo // See https://llvm.org/LICENSE.txt for license information.
5cea112f4SWalter Erquinigo // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6cea112f4SWalter Erquinigo //
7cea112f4SWalter Erquinigo //===----------------------------------------------------------------------===/
8cea112f4SWalter Erquinigo 
9cea112f4SWalter Erquinigo #include "gtest/gtest.h"
10cea112f4SWalter Erquinigo 
11cea112f4SWalter Erquinigo #include "lldb/API/SBCommandInterpreter.h"
12cea112f4SWalter Erquinigo #include "lldb/API/SBCommandReturnObject.h"
13cea112f4SWalter Erquinigo #include "lldb/API/SBDebugger.h"
14cea112f4SWalter Erquinigo 
15cea112f4SWalter Erquinigo #include <cstring>
16cea112f4SWalter Erquinigo #include <string>
17cea112f4SWalter Erquinigo 
18cea112f4SWalter Erquinigo using namespace lldb;
19cea112f4SWalter Erquinigo 
20cea112f4SWalter Erquinigo class SBCommandInterpreterTest : public testing::Test {
21cea112f4SWalter Erquinigo protected:
SetUp()22cea112f4SWalter Erquinigo   void SetUp() override {
23cea112f4SWalter Erquinigo     SBDebugger::Initialize();
24cea112f4SWalter Erquinigo     m_dbg = SBDebugger::Create(/*source_init_files=*/false);
25cea112f4SWalter Erquinigo   }
26cea112f4SWalter Erquinigo 
27cea112f4SWalter Erquinigo   SBDebugger m_dbg;
28cea112f4SWalter Erquinigo };
29cea112f4SWalter Erquinigo 
30cea112f4SWalter Erquinigo class DummyCommand : public SBCommandPluginInterface {
31cea112f4SWalter Erquinigo public:
DummyCommand(const char * message)32cea112f4SWalter Erquinigo   DummyCommand(const char *message) : m_message(message) {}
33cea112f4SWalter Erquinigo 
DoExecute(SBDebugger dbg,char ** command,SBCommandReturnObject & result)34cea112f4SWalter Erquinigo   bool DoExecute(SBDebugger dbg, char **command,
35fd146460SShafik Yaghmour                  SBCommandReturnObject &result) override {
36cea112f4SWalter Erquinigo     result.PutCString(m_message.c_str());
37cea112f4SWalter Erquinigo     result.SetStatus(eReturnStatusSuccessFinishResult);
38cea112f4SWalter Erquinigo     return result.Succeeded();
39cea112f4SWalter Erquinigo   }
40cea112f4SWalter Erquinigo 
41cea112f4SWalter Erquinigo private:
42cea112f4SWalter Erquinigo   std::string m_message;
43cea112f4SWalter Erquinigo };
44cea112f4SWalter Erquinigo 
TEST_F(SBCommandInterpreterTest,SingleWordCommand)45cea112f4SWalter Erquinigo TEST_F(SBCommandInterpreterTest, SingleWordCommand) {
46cea112f4SWalter Erquinigo   // We first test a command without autorepeat
47cea112f4SWalter Erquinigo   DummyCommand dummy("It worked");
48*27b6a4e6SAlex Langford   SBCommandInterpreter interp = m_dbg.GetCommandInterpreter();
49*27b6a4e6SAlex Langford   interp.AddCommand("dummy", &dummy, /*help=*/nullptr);
50cea112f4SWalter Erquinigo   {
51cea112f4SWalter Erquinigo     SBCommandReturnObject result;
52*27b6a4e6SAlex Langford     interp.HandleCommand("dummy", result, /*add_to_history=*/true);
53cea112f4SWalter Erquinigo     EXPECT_TRUE(result.Succeeded());
54cea112f4SWalter Erquinigo     EXPECT_STREQ(result.GetOutput(), "It worked\n");
55cea112f4SWalter Erquinigo   }
56cea112f4SWalter Erquinigo   {
57cea112f4SWalter Erquinigo     SBCommandReturnObject result;
58*27b6a4e6SAlex Langford     interp.HandleCommand("", result);
59cea112f4SWalter Erquinigo     EXPECT_FALSE(result.Succeeded());
60cea112f4SWalter Erquinigo     EXPECT_STREQ(result.GetError(), "error: No auto repeat.\n");
61cea112f4SWalter Erquinigo   }
62cea112f4SWalter Erquinigo 
63cea112f4SWalter Erquinigo   // Now we test a command with autorepeat
64*27b6a4e6SAlex Langford   interp.AddCommand("dummy_with_autorepeat", &dummy, /*help=*/nullptr,
65cea112f4SWalter Erquinigo                     /*syntax=*/nullptr, /*auto_repeat_command=*/nullptr);
66cea112f4SWalter Erquinigo   {
67cea112f4SWalter Erquinigo     SBCommandReturnObject result;
68*27b6a4e6SAlex Langford     interp.HandleCommand("dummy_with_autorepeat", result,
69cea112f4SWalter Erquinigo                          /*add_to_history=*/true);
70cea112f4SWalter Erquinigo     EXPECT_TRUE(result.Succeeded());
71cea112f4SWalter Erquinigo     EXPECT_STREQ(result.GetOutput(), "It worked\n");
72cea112f4SWalter Erquinigo   }
73cea112f4SWalter Erquinigo   {
74cea112f4SWalter Erquinigo     SBCommandReturnObject result;
75*27b6a4e6SAlex Langford     interp.HandleCommand("", result);
76cea112f4SWalter Erquinigo     EXPECT_TRUE(result.Succeeded());
77cea112f4SWalter Erquinigo     EXPECT_STREQ(result.GetOutput(), "It worked\n");
78cea112f4SWalter Erquinigo   }
79cea112f4SWalter Erquinigo }
80cea112f4SWalter Erquinigo 
TEST_F(SBCommandInterpreterTest,MultiWordCommand)81cea112f4SWalter Erquinigo TEST_F(SBCommandInterpreterTest, MultiWordCommand) {
82*27b6a4e6SAlex Langford   SBCommandInterpreter interp = m_dbg.GetCommandInterpreter();
83*27b6a4e6SAlex Langford   auto command = interp.AddMultiwordCommand("multicommand", /*help=*/nullptr);
84cea112f4SWalter Erquinigo   // We first test a subcommand without autorepeat
85cea112f4SWalter Erquinigo   DummyCommand subcommand("It worked again");
86cea112f4SWalter Erquinigo   command.AddCommand("subcommand", &subcommand, /*help=*/nullptr);
87cea112f4SWalter Erquinigo   {
88cea112f4SWalter Erquinigo     SBCommandReturnObject result;
89*27b6a4e6SAlex Langford     interp.HandleCommand("multicommand subcommand", result,
90cea112f4SWalter Erquinigo                          /*add_to_history=*/true);
91cea112f4SWalter Erquinigo     EXPECT_TRUE(result.Succeeded());
92cea112f4SWalter Erquinigo     EXPECT_STREQ(result.GetOutput(), "It worked again\n");
93cea112f4SWalter Erquinigo   }
94cea112f4SWalter Erquinigo   {
95cea112f4SWalter Erquinigo     SBCommandReturnObject result;
96*27b6a4e6SAlex Langford     interp.HandleCommand("", result);
97cea112f4SWalter Erquinigo     EXPECT_FALSE(result.Succeeded());
98cea112f4SWalter Erquinigo     EXPECT_STREQ(result.GetError(), "error: No auto repeat.\n");
99cea112f4SWalter Erquinigo   }
100cea112f4SWalter Erquinigo 
101cea112f4SWalter Erquinigo   // We first test a subcommand with autorepeat
102cea112f4SWalter Erquinigo   command.AddCommand("subcommand_with_autorepeat", &subcommand,
103cea112f4SWalter Erquinigo                      /*help=*/nullptr, /*syntax=*/nullptr,
104cea112f4SWalter Erquinigo                      /*auto_repeat_command=*/nullptr);
105cea112f4SWalter Erquinigo   {
106cea112f4SWalter Erquinigo     SBCommandReturnObject result;
107*27b6a4e6SAlex Langford     interp.HandleCommand("multicommand subcommand_with_autorepeat", result,
108cea112f4SWalter Erquinigo                          /*add_to_history=*/true);
109cea112f4SWalter Erquinigo     EXPECT_TRUE(result.Succeeded());
110cea112f4SWalter Erquinigo     EXPECT_STREQ(result.GetOutput(), "It worked again\n");
111cea112f4SWalter Erquinigo   }
112cea112f4SWalter Erquinigo   {
113cea112f4SWalter Erquinigo     SBCommandReturnObject result;
114*27b6a4e6SAlex Langford     interp.HandleCommand("", result);
115cea112f4SWalter Erquinigo     EXPECT_TRUE(result.Succeeded());
116cea112f4SWalter Erquinigo     EXPECT_STREQ(result.GetOutput(), "It worked again\n");
117cea112f4SWalter Erquinigo   }
118cea112f4SWalter Erquinigo 
119cea112f4SWalter Erquinigo   DummyCommand subcommand2("It worked again 2");
120cea112f4SWalter Erquinigo   // We now test a subcommand with autorepeat of the command name
121cea112f4SWalter Erquinigo   command.AddCommand(
122cea112f4SWalter Erquinigo       "subcommand_with_custom_autorepeat", &subcommand2, /*help=*/nullptr,
123cea112f4SWalter Erquinigo       /*syntax=*/nullptr,
124cea112f4SWalter Erquinigo       /*auto_repeat_command=*/"multicommand subcommand_with_autorepeat");
125cea112f4SWalter Erquinigo   {
126cea112f4SWalter Erquinigo     SBCommandReturnObject result;
127*27b6a4e6SAlex Langford     interp.HandleCommand("multicommand subcommand_with_custom_autorepeat",
128cea112f4SWalter Erquinigo                          result, /*add_to_history=*/true);
129cea112f4SWalter Erquinigo     EXPECT_TRUE(result.Succeeded());
130cea112f4SWalter Erquinigo     EXPECT_STREQ(result.GetOutput(), "It worked again 2\n");
131cea112f4SWalter Erquinigo   }
132cea112f4SWalter Erquinigo   {
133cea112f4SWalter Erquinigo     SBCommandReturnObject result;
134*27b6a4e6SAlex Langford     interp.HandleCommand("", result);
135cea112f4SWalter Erquinigo     EXPECT_TRUE(result.Succeeded());
136cea112f4SWalter Erquinigo     EXPECT_STREQ(result.GetOutput(), "It worked again\n");
137cea112f4SWalter Erquinigo   }
138cea112f4SWalter Erquinigo }
139