blob: e99f30dbb768609551a831cb4d41374ae9b77509 [file] [log] [blame]
#include "swift/IDE/CodeCompletion.h"
#include "gtest/gtest.h"
using namespace swift;
using namespace ide;
static std::string replaceAtWithNull(const std::string &S) {
std::string Result = S;
for (char &C : Result) {
if (C == '@')
C = '\0';
}
return Result;
}
TEST(CodeCompletionToken, FindInEmptyFile) {
std::string Source = "";
unsigned Offset;
std::string Clean = removeCodeCompletionTokens(Source, "A", &Offset);
EXPECT_EQ(~0U, Offset);
EXPECT_EQ("", Clean);
}
TEST(CodeCompletionToken, FindNonExistent) {
std::string Source = "func zzz() {}";
unsigned Offset;
std::string Clean = removeCodeCompletionTokens(Source, "A", &Offset);
EXPECT_EQ(~0U, Offset);
EXPECT_EQ(Source, Clean);
}
TEST(CodeCompletionToken, RemovesOtherTokens) {
std::string Source = "func zzz() {#^B^#}";
unsigned Offset;
std::string Clean = removeCodeCompletionTokens(Source, "A", &Offset);
EXPECT_EQ(~0U, Offset);
EXPECT_EQ("func zzz() {}", Clean);
}
TEST(CodeCompletionToken, FindBegin) {
std::string Source = "#^A^# func";
unsigned Offset;
std::string Clean = removeCodeCompletionTokens(Source, "A", &Offset);
EXPECT_EQ(0U, Offset);
EXPECT_EQ(replaceAtWithNull("@ func"), Clean);
}
TEST(CodeCompletionToken, FindEnd) {
std::string Source = "func #^A^#";
unsigned Offset;
std::string Clean = removeCodeCompletionTokens(Source, "A", &Offset);
EXPECT_EQ(5U, Offset);
EXPECT_EQ(replaceAtWithNull("func @"), Clean);
}
TEST(CodeCompletionToken, FindSingleLine) {
std::string Source = "func zzz() {#^A^#}";
unsigned Offset;
std::string Clean = removeCodeCompletionTokens(Source, "A", &Offset);
EXPECT_EQ(12U, Offset);
EXPECT_EQ(replaceAtWithNull("func zzz() {@}"), Clean);
}
TEST(CodeCompletionToken, FindMultiline) {
std::string Source =
"func zzz() {\n"
" 1 + #^A^#\r\n"
"}\n";
unsigned Offset;
std::string Clean = removeCodeCompletionTokens(Source, "A", &Offset);
EXPECT_EQ(19U, Offset);
EXPECT_EQ(replaceAtWithNull("func zzz() {\n 1 + @\r\n}\n"), Clean);
}