From 073951f28be014cb3f723da7fff1081454da9035 Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Sat, 14 Mar 2015 23:39:42 +0000 Subject: [PATCH] Fix a bug related to arg escaping, and add unit tests. A recent refactor had introduced a bug where if you escaped a character, the rest of the string would get processed incorrectly. This patch fixes that bug and adds some unit tests for Args. llvm-svn: 232288 --- lldb/source/Interpreter/Args.cpp | 2 +- lldb/unittests/CMakeLists.txt | 1 + lldb/unittests/Interpreter/CMakeLists.txt | 8 ++++ lldb/unittests/Interpreter/TestArgs.cpp | 70 +++++++++++++++++++++++++++++++ 4 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 lldb/unittests/Interpreter/CMakeLists.txt create mode 100644 lldb/unittests/Interpreter/TestArgs.cpp diff --git a/lldb/source/Interpreter/Args.cpp b/lldb/source/Interpreter/Args.cpp index 95f7ea5..0678768 100644 --- a/lldb/source/Interpreter/Args.cpp +++ b/lldb/source/Interpreter/Args.cpp @@ -230,7 +230,7 @@ Args::ParseSingleArgument(llvm::StringRef command) arg += '\\'; arg += command.front(); - command.drop_front(); + command = command.drop_front(); break; diff --git a/lldb/unittests/CMakeLists.txt b/lldb/unittests/CMakeLists.txt index 6899904..64dee01 100644 --- a/lldb/unittests/CMakeLists.txt +++ b/lldb/unittests/CMakeLists.txt @@ -21,5 +21,6 @@ function(add_lldb_unittest test_name) endfunction() add_subdirectory(Host) +add_subdirectory(Interpreter) add_subdirectory(Plugins) add_subdirectory(Utility) diff --git a/lldb/unittests/Interpreter/CMakeLists.txt b/lldb/unittests/Interpreter/CMakeLists.txt new file mode 100644 index 0000000..4587a01 --- /dev/null +++ b/lldb/unittests/Interpreter/CMakeLists.txt @@ -0,0 +1,8 @@ +set(LLDB_USED_LIBS + lldbInterpreter + ${PYTHON_LIBRARY} + ) + +add_lldb_unittest(InterpreterTests + TestArgs.cpp + ) diff --git a/lldb/unittests/Interpreter/TestArgs.cpp b/lldb/unittests/Interpreter/TestArgs.cpp new file mode 100644 index 0000000..a459721 --- /dev/null +++ b/lldb/unittests/Interpreter/TestArgs.cpp @@ -0,0 +1,70 @@ +//===-- ArgsTest.cpp --------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "gtest/gtest.h" + +#include "lldb/Interpreter/Args.h" + +using namespace lldb_private; + +TEST(ArgsTest, TestSingleArg) +{ + Args args; + args.SetCommandString("arg"); + EXPECT_EQ(1, args.GetArgumentCount()); + EXPECT_STREQ(args.GetArgumentAtIndex(0), "arg"); +} + +TEST(ArgsTest, TestSingleQuotedArgWithSpace) +{ + Args args; + args.SetCommandString("\"arg with space\""); + EXPECT_EQ(1, args.GetArgumentCount()); + EXPECT_STREQ(args.GetArgumentAtIndex(0), "arg with space"); +} + +TEST(ArgsTest, TestSingleArgWithQuotedSpace) +{ + Args args; + args.SetCommandString("arg\\ with\\ space"); + EXPECT_EQ(1, args.GetArgumentCount()); + EXPECT_STREQ(args.GetArgumentAtIndex(0), "arg with space"); +} + +TEST(ArgsTest, TestMultipleArgs) +{ + Args args; + args.SetCommandString("this has multiple args"); + EXPECT_EQ(4, args.GetArgumentCount()); + EXPECT_STREQ(args.GetArgumentAtIndex(0), "this"); + EXPECT_STREQ(args.GetArgumentAtIndex(1), "has"); + EXPECT_STREQ(args.GetArgumentAtIndex(2), "multiple"); + EXPECT_STREQ(args.GetArgumentAtIndex(3), "args"); +} + +TEST(ArgsTest, TestOverwriteArgs) +{ + Args args; + args.SetCommandString("this has multiple args"); + EXPECT_EQ(4, args.GetArgumentCount()); + args.SetCommandString("arg"); + EXPECT_EQ(1, args.GetArgumentCount()); + EXPECT_STREQ(args.GetArgumentAtIndex(0), "arg"); +} + +TEST(ArgsTest, TestAppendArg) +{ + Args args; + args.SetCommandString("first_arg"); + EXPECT_EQ(1, args.GetArgumentCount()); + args.AppendArgument("second_arg"); + EXPECT_EQ(2, args.GetArgumentCount()); + EXPECT_STREQ(args.GetArgumentAtIndex(0), "first_arg"); + EXPECT_STREQ(args.GetArgumentAtIndex(1), "second_arg"); +} -- 2.7.4