TEST(CompletionRequest, DuplicateFilteringWithComments) { std::string command = "a bad c"; const unsigned cursor_pos = 3; StringList matches, descriptions; CompletionResult result; CompletionRequest request(command, cursor_pos, 0, 0, result); result.GetMatches(matches); result.GetDescriptions(descriptions); EXPECT_EQ(0U, request.GetNumberOfMatches()); // Add foo twice with same comment request.AddCompletion("foo", "comment"); result.GetMatches(matches); result.GetDescriptions(descriptions); EXPECT_EQ(1U, request.GetNumberOfMatches()); EXPECT_EQ(1U, matches.GetSize()); EXPECT_EQ(1U, descriptions.GetSize()); EXPECT_STREQ("foo", matches.GetStringAtIndex(0)); EXPECT_STREQ("comment", descriptions.GetStringAtIndex(0)); request.AddCompletion("foo", "comment"); result.GetMatches(matches); result.GetDescriptions(descriptions); EXPECT_EQ(1U, request.GetNumberOfMatches()); EXPECT_EQ(1U, matches.GetSize()); EXPECT_EQ(1U, descriptions.GetSize()); EXPECT_STREQ("foo", matches.GetStringAtIndex(0)); EXPECT_STREQ("comment", descriptions.GetStringAtIndex(0)); // Add bar twice with different comments request.AddCompletion("bar", "comment"); result.GetMatches(matches); result.GetDescriptions(descriptions); EXPECT_EQ(2U, request.GetNumberOfMatches()); EXPECT_EQ(2U, matches.GetSize()); EXPECT_EQ(2U, descriptions.GetSize()); EXPECT_STREQ("foo", matches.GetStringAtIndex(0)); EXPECT_STREQ("bar", matches.GetStringAtIndex(1)); request.AddCompletion("bar", "another comment"); result.GetMatches(matches); result.GetDescriptions(descriptions); EXPECT_EQ(3U, request.GetNumberOfMatches()); EXPECT_EQ(3U, matches.GetSize()); EXPECT_EQ(3U, descriptions.GetSize()); EXPECT_STREQ("foo", matches.GetStringAtIndex(0)); EXPECT_STREQ("comment", descriptions.GetStringAtIndex(0)); EXPECT_STREQ("bar", matches.GetStringAtIndex(1)); EXPECT_STREQ("comment", descriptions.GetStringAtIndex(1)); EXPECT_STREQ("bar", matches.GetStringAtIndex(2)); EXPECT_STREQ("another comment", descriptions.GetStringAtIndex(2)); // Add foo again with no comment request.AddCompletion("foo"); result.GetMatches(matches); result.GetDescriptions(descriptions); EXPECT_EQ(4U, request.GetNumberOfMatches()); EXPECT_EQ(4U, matches.GetSize()); EXPECT_EQ(4U, descriptions.GetSize()); EXPECT_STREQ("foo", matches.GetStringAtIndex(0)); EXPECT_STREQ("comment", descriptions.GetStringAtIndex(0)); EXPECT_STREQ("bar", matches.GetStringAtIndex(1)); EXPECT_STREQ("comment", descriptions.GetStringAtIndex(1)); EXPECT_STREQ("bar", matches.GetStringAtIndex(2)); EXPECT_STREQ("another comment", descriptions.GetStringAtIndex(2)); EXPECT_STREQ("foo", matches.GetStringAtIndex(3)); EXPECT_STREQ("", descriptions.GetStringAtIndex(3)); }