brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.7 KiB · c420109 Raw
142 lines · cpp
1//===-- SBCommandInterpreterTest.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-exception6//7//===----------------------------------------------------------------------===/8 9// Use the umbrella header for -Wdocumentation.10#include "lldb/API/LLDB.h"11 12#include "TestingSupport/SubsystemRAII.h"13#include "lldb/API/SBDebugger.h"14#include "gtest/gtest.h"15#include <cstring>16#include <string>17 18using namespace lldb;19using namespace lldb_private;20 21class SBCommandInterpreterTest : public testing::Test {22protected:23  void SetUp() override {24    debugger = SBDebugger::Create(/*source_init_files=*/false);25  }26 27  void TearDown() override { SBDebugger::Destroy(debugger); }28 29  SubsystemRAII<lldb::SBDebugger> subsystems;30  SBDebugger debugger;31};32 33class DummyCommand : public SBCommandPluginInterface {34public:35  DummyCommand(const char *message) : m_message(message) {}36 37  bool DoExecute(SBDebugger dbg, char **command,38                 SBCommandReturnObject &result) override {39    result.PutCString(m_message.c_str());40    result.SetStatus(eReturnStatusSuccessFinishResult);41    return result.Succeeded();42  }43 44private:45  std::string m_message;46};47 48TEST_F(SBCommandInterpreterTest, SingleWordCommand) {49  // We first test a command without autorepeat50  DummyCommand dummy("It worked");51  SBCommandInterpreter interp = debugger.GetCommandInterpreter();52  interp.AddCommand("dummy", &dummy, /*help=*/nullptr);53  {54    SBCommandReturnObject result;55    interp.HandleCommand("dummy", result, /*add_to_history=*/true);56    EXPECT_TRUE(result.Succeeded());57    EXPECT_STREQ(result.GetOutput(), "It worked\n");58  }59  {60    SBCommandReturnObject result;61    interp.HandleCommand("", result);62    EXPECT_FALSE(result.Succeeded());63    EXPECT_STREQ(result.GetError(), "error: no auto repeat\n");64  }65 66  // Now we test a command with autorepeat67  interp.AddCommand("dummy_with_autorepeat", &dummy, /*help=*/nullptr,68                    /*syntax=*/nullptr, /*auto_repeat_command=*/nullptr);69  {70    SBCommandReturnObject result;71    interp.HandleCommand("dummy_with_autorepeat", result,72                         /*add_to_history=*/true);73    EXPECT_TRUE(result.Succeeded());74    EXPECT_STREQ(result.GetOutput(), "It worked\n");75  }76  {77    SBCommandReturnObject result;78    interp.HandleCommand("", result);79    EXPECT_TRUE(result.Succeeded());80    EXPECT_STREQ(result.GetOutput(), "It worked\n");81  }82}83 84TEST_F(SBCommandInterpreterTest, MultiWordCommand) {85  SBCommandInterpreter interp = debugger.GetCommandInterpreter();86  auto command = interp.AddMultiwordCommand("multicommand", /*help=*/nullptr);87  // We first test a subcommand without autorepeat88  DummyCommand subcommand("It worked again");89  command.AddCommand("subcommand", &subcommand, /*help=*/nullptr);90  {91    SBCommandReturnObject result;92    interp.HandleCommand("multicommand subcommand", result,93                         /*add_to_history=*/true);94    EXPECT_TRUE(result.Succeeded());95    EXPECT_STREQ(result.GetOutput(), "It worked again\n");96  }97  {98    SBCommandReturnObject result;99    interp.HandleCommand("", result);100    EXPECT_FALSE(result.Succeeded());101    EXPECT_STREQ(result.GetError(), "error: no auto repeat\n");102  }103 104  // We first test a subcommand with autorepeat105  command.AddCommand("subcommand_with_autorepeat", &subcommand,106                     /*help=*/nullptr, /*syntax=*/nullptr,107                     /*auto_repeat_command=*/nullptr);108  {109    SBCommandReturnObject result;110    interp.HandleCommand("multicommand subcommand_with_autorepeat", result,111                         /*add_to_history=*/true);112    EXPECT_TRUE(result.Succeeded());113    EXPECT_STREQ(result.GetOutput(), "It worked again\n");114  }115  {116    SBCommandReturnObject result;117    interp.HandleCommand("", result);118    EXPECT_TRUE(result.Succeeded());119    EXPECT_STREQ(result.GetOutput(), "It worked again\n");120  }121 122  DummyCommand subcommand2("It worked again 2");123  // We now test a subcommand with autorepeat of the command name124  command.AddCommand(125      "subcommand_with_custom_autorepeat", &subcommand2, /*help=*/nullptr,126      /*syntax=*/nullptr,127      /*auto_repeat_command=*/"multicommand subcommand_with_autorepeat");128  {129    SBCommandReturnObject result;130    interp.HandleCommand("multicommand subcommand_with_custom_autorepeat",131                         result, /*add_to_history=*/true);132    EXPECT_TRUE(result.Succeeded());133    EXPECT_STREQ(result.GetOutput(), "It worked again 2\n");134  }135  {136    SBCommandReturnObject result;137    interp.HandleCommand("", result);138    EXPECT_TRUE(result.Succeeded());139    EXPECT_STREQ(result.GetOutput(), "It worked again\n");140  }141}142