summaryrefslogtreecommitdiffstats
path: root/lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp
diff options
context:
space:
mode:
authorPavel Labath <labath@google.com>2016-08-18 08:21:38 +0000
committerPavel Labath <labath@google.com>2016-08-18 08:21:38 +0000
commit9361c439e8cef6fcc87edefbc3389ad1160984fd (patch)
treefe439cc09665f2c94650ee80761045963f9eebfc /lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp
parent6ee4f905dce7c4fde389f8e06c89b463fcbf68ac (diff)
downloadbcm5719-llvm-9361c439e8cef6fcc87edefbc3389ad1160984fd.tar.gz
bcm5719-llvm-9361c439e8cef6fcc87edefbc3389ad1160984fd.zip
Fix parsing of complicated C++ names
Summary: CPlusPlusLanguage::MethodName was not correctly parsing templated functions whose demangled name included the return type -- the space before the function name was included in the "context" and the context itself was not terminated correctly due to a misuse of the substr function (second argument is length, not the end position). Fix that and add a regression test. Reviewers: clayborg Subscribers: lldb-commits Differential Revision: https://reviews.llvm.org/D23608 llvm-svn: 279038
Diffstat (limited to 'lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp')
-rw-r--r--lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp b/lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp
new file mode 100644
index 00000000000..8b3cd50bbbf
--- /dev/null
+++ b/lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp
@@ -0,0 +1,41 @@
+//===-- CPlusPlusLanguageTest.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 "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
+
+using namespace lldb_private;
+
+TEST(CPlusPlusLanguage, MethodName)
+{
+ struct TestCase {
+ std::string input;
+ std::string context, basename, arguments, qualifiers, scope_qualified_name;
+ };
+
+ TestCase test_cases[] = {{"foo::bar(baz)", "foo", "bar", "(baz)", "", "foo::bar"},
+ {"std::basic_ostream<char, std::char_traits<char> >& "
+ "std::operator<<<std::char_traits<char> >"
+ "(std::basic_ostream<char, std::char_traits<char> >&, char const*)",
+ "std", "operator<<<std::char_traits<char> >",
+ "(std::basic_ostream<char, std::char_traits<char> >&, char const*)", "",
+ "std::operator<<<std::char_traits<char> >"}};
+
+ for (const auto &test: test_cases)
+ {
+ CPlusPlusLanguage::MethodName method(ConstString(test.input));
+ EXPECT_TRUE(method.IsValid());
+ EXPECT_EQ(test.context, method.GetContext());
+ EXPECT_EQ(test.basename, method.GetBasename());
+ EXPECT_EQ(test.arguments, method.GetArguments());
+ EXPECT_EQ(test.qualifiers, method.GetQualifiers());
+ EXPECT_EQ(test.scope_qualified_name, method.GetScopeQualifiedName());
+ }
+}
OpenPOWER on IntegriCloud