//===-- CompletionRequestTest.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/Utility/CompletionRequest.h" using namespace lldb_private; TEST(CompletionRequest, Constructor) { std::string command = "a bad c"; const unsigned cursor_pos = 3; const int arg_index = 1; const int arg_cursor_pos = 1; const int match_start = 2345; const int match_max_return = 12345; StringList matches; CompletionRequest request(command, cursor_pos, match_start, match_max_return, matches); EXPECT_STREQ(request.GetRawLine().str().c_str(), command.c_str()); EXPECT_EQ(request.GetRawCursorPos(), cursor_pos); EXPECT_EQ(request.GetCursorIndex(), arg_index); EXPECT_EQ(request.GetCursorCharPosition(), arg_cursor_pos); EXPECT_EQ(request.GetMatchStartPoint(), match_start); EXPECT_EQ(request.GetMaxReturnElements(), match_max_return); EXPECT_EQ(request.GetWordComplete(), false); EXPECT_EQ(request.GetPartialParsedLine().GetArgumentCount(), 2u); EXPECT_STREQ(request.GetPartialParsedLine().GetArgumentAtIndex(1), "b"); } TEST(CompletionRequest, DuplicateFiltering) { std::string command = "a bad c"; const unsigned cursor_pos = 3; StringList matches; CompletionRequest request(command, cursor_pos, 0, 0, matches); EXPECT_EQ(0U, request.GetNumberOfMatches()); // Add foo twice request.AddCompletion("foo"); EXPECT_EQ(1U, request.GetNumberOfMatches()); EXPECT_EQ(1U, matches.GetSize()); EXPECT_STREQ("foo", matches.GetStringAtIndex(0)); request.AddCompletion("foo"); EXPECT_EQ(1U, request.GetNumberOfMatches()); EXPECT_EQ(1U, matches.GetSize()); EXPECT_STREQ("foo", matches.GetStringAtIndex(0)); // Add bar twice request.AddCompletion("bar"); EXPECT_EQ(2U, request.GetNumberOfMatches()); EXPECT_EQ(2U, matches.GetSize()); EXPECT_STREQ("foo", matches.GetStringAtIndex(0)); EXPECT_STREQ("bar", matches.GetStringAtIndex(1)); request.AddCompletion("bar"); EXPECT_EQ(2U, request.GetNumberOfMatches()); EXPECT_EQ(2U, matches.GetSize()); EXPECT_STREQ("foo", matches.GetStringAtIndex(0)); EXPECT_STREQ("bar", matches.GetStringAtIndex(1)); // Add foo again. request.AddCompletion("foo"); EXPECT_EQ(2U, request.GetNumberOfMatches()); EXPECT_EQ(2U, matches.GetSize()); EXPECT_STREQ("foo", matches.GetStringAtIndex(0)); EXPECT_STREQ("bar", matches.GetStringAtIndex(1)); // Add something with an existing prefix request.AddCompletion("foobar"); EXPECT_EQ(3U, request.GetNumberOfMatches()); EXPECT_EQ(3U, matches.GetSize()); EXPECT_STREQ("foo", matches.GetStringAtIndex(0)); EXPECT_STREQ("bar", matches.GetStringAtIndex(1)); EXPECT_STREQ("foobar", matches.GetStringAtIndex(2)); } TEST(CompletionRequest, TestCompletionOwnership) { std::string command = "a bad c"; const unsigned cursor_pos = 3; StringList matches; CompletionRequest request(command, cursor_pos, 0, 0, matches); std::string Temporary = "bar"; request.AddCompletion(Temporary); // Manipulate our completion. The request should have taken a copy, so that // shouldn't influence anything. Temporary[0] = 'f'; EXPECT_EQ(1U, request.GetNumberOfMatches()); EXPECT_STREQ("bar", matches.GetStringAtIndex(0)); }