mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
89 lines
2.5 KiB
C++
89 lines
2.5 KiB
C++
#include "swift/IDE/Utils.h"
|
|
#include "llvm/ADT/STLExtras.h"
|
|
#include "llvm/Support/MemoryBuffer.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace swift;
|
|
using namespace ide;
|
|
|
|
static std::string replaceFromString(const std::string &S,
|
|
bool *HadPH = nullptr) {
|
|
auto Buf = llvm::MemoryBuffer::getMemBufferCopy(S, "");
|
|
|
|
Buf = ide::replacePlaceholders(std::move(Buf), HadPH);
|
|
return Buf->getBuffer();
|
|
}
|
|
|
|
TEST(Placeholders, Replace) {
|
|
std::string Source = "aa <#one#> bb <# two #>";
|
|
std::string Result = "aa $_0____ bb $_1______";
|
|
std::string BufName = "<the buffer>";
|
|
auto Buf = llvm::MemoryBuffer::getMemBufferCopy(Source, BufName);
|
|
struct PH {
|
|
std::string Full;
|
|
std::string Content;
|
|
std::string Ident;
|
|
};
|
|
std::vector<PH> PHs;
|
|
PHs.push_back(PH{"<#one#>", "one", "$_0____"});
|
|
PHs.push_back(PH{"<# two #>", " two ", "$_1______"});
|
|
|
|
unsigned Index = 0;
|
|
Buf = ide::replacePlaceholders(std::move(Buf),
|
|
[&](const PlaceholderOccurrence &Occur) {
|
|
EXPECT_EQ(PHs[Index].Full, std::string(Occur.FullPlaceholder));
|
|
EXPECT_EQ(PHs[Index].Content, std::string(Occur.PlaceholderContent));
|
|
EXPECT_EQ(PHs[Index].Ident, std::string(Occur.IdentifierReplacement));
|
|
++Index;
|
|
});
|
|
|
|
EXPECT_EQ(BufName, std::string(Buf->getBufferIdentifier()));
|
|
EXPECT_EQ(Result, std::string(Buf->getBuffer()));
|
|
}
|
|
|
|
TEST(Placeholders, ReplaceNoCallback) {
|
|
std::string Source = "aa <#one#> bb <# two #>";
|
|
std::string Result = "aa $_0____ bb $_1______";
|
|
bool HadOne;
|
|
std::string Out = replaceFromString(Source, &HadOne);
|
|
EXPECT_EQ(true, HadOne);
|
|
EXPECT_EQ(Result, Out);
|
|
}
|
|
|
|
TEST(Placeholders, NoPlaceholder1) {
|
|
std::string Source = "aa";
|
|
bool HadOne;
|
|
std::string Out = replaceFromString(Source, &HadOne);
|
|
EXPECT_EQ(false, HadOne);
|
|
EXPECT_EQ(Source, Out);
|
|
}
|
|
|
|
TEST(Placeholders, NoPlaceholder2) {
|
|
bool HadOne;
|
|
replaceFromString("<#", &HadOne);
|
|
EXPECT_EQ(false, HadOne);
|
|
replaceFromString("<#a#", &HadOne);
|
|
EXPECT_EQ(false, HadOne);
|
|
replaceFromString("<#a\n#>", &HadOne);
|
|
EXPECT_EQ(false, HadOne);
|
|
replaceFromString("< #a#>", &HadOne);
|
|
EXPECT_EQ(false, HadOne);
|
|
}
|
|
|
|
TEST(Placeholders, Nested) {
|
|
std::string Source = "<#<#aa#>#>";
|
|
std::string Result = "<#$_0___#>";
|
|
std::string Out = replaceFromString(Source);
|
|
EXPECT_EQ(Result, Out);
|
|
}
|
|
|
|
TEST(Placeholders, TooShort) {
|
|
std::string Source;
|
|
for (unsigned i = 0; i != 102; ++i) {
|
|
Source += "<##>\n";
|
|
}
|
|
std::string Out = replaceFromString(Source);
|
|
std::string Last = StringRef(Out).substr(Out.size()-15);
|
|
EXPECT_EQ("$_99\n$___\n$___\n", Last);
|
|
}
|