mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
75 lines
2.0 KiB
C++
75 lines
2.0 KiB
C++
#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);
|
|
}
|
|
|