Clear Project (#40)
This commit is contained in:
@@ -1,91 +1,90 @@
|
||||
#include "Test/CTest.h"
|
||||
#include "Basic/SourceConverter.h"
|
||||
#include "Test/Test.h"
|
||||
|
||||
namespace clice {
|
||||
namespace clice::testing {
|
||||
|
||||
namespace {
|
||||
|
||||
TEST(SourceConverter, Remeasure) {
|
||||
using SC = SourceConverter;
|
||||
using SC = SourceConverter;
|
||||
|
||||
SourceConverter utf8{proto::PositionEncodingKind::UTF8};
|
||||
SourceConverter utf8{proto::PositionEncodingKind::UTF8};
|
||||
|
||||
EXPECT_EQ(utf8.remeasure(""), 0);
|
||||
EXPECT_EQ(utf8.remeasure("ascii"), 5);
|
||||
EXPECT_EQ(utf8.remeasure(""), 0);
|
||||
EXPECT_EQ(utf8.remeasure("ascii"), 5);
|
||||
|
||||
SourceConverter utf16{proto::PositionEncodingKind::UTF16};
|
||||
SourceConverter utf16{proto::PositionEncodingKind::UTF16};
|
||||
|
||||
EXPECT_EQ(utf16.remeasure("↓"), 1);
|
||||
EXPECT_EQ(utf16.remeasure("¥"), 1);
|
||||
EXPECT_EQ(utf16.remeasure("↓"), 1);
|
||||
EXPECT_EQ(utf16.remeasure("¥"), 1);
|
||||
|
||||
SourceConverter utf32{proto::PositionEncodingKind::UTF32};
|
||||
EXPECT_EQ(utf8.remeasure("😂"), 4);
|
||||
EXPECT_EQ(utf16.remeasure("😂"), 2);
|
||||
EXPECT_EQ(utf32.remeasure("😂"), 1);
|
||||
SourceConverter utf32{proto::PositionEncodingKind::UTF32};
|
||||
EXPECT_EQ(utf8.remeasure("😂"), 4);
|
||||
EXPECT_EQ(utf16.remeasure("😂"), 2);
|
||||
EXPECT_EQ(utf32.remeasure("😂"), 1);
|
||||
}
|
||||
|
||||
TEST(SourceConverter, Position) {
|
||||
const char *main = "int a /*😂*/ = 1;$(eof)";
|
||||
const char* main = "int a /*😂*/ = 1;$(eof)";
|
||||
|
||||
Tester txs("main.cpp", main);
|
||||
txs.run("-std=c++11");
|
||||
Tester txs("main.cpp", main);
|
||||
txs.run("-std=c++11");
|
||||
|
||||
auto &src = txs.info.srcMgr();
|
||||
auto &tks = txs.info.tokBuf();
|
||||
auto& src = txs.info.srcMgr();
|
||||
auto& tks = txs.info.tokBuf();
|
||||
|
||||
auto mainid = src.getMainFileID();
|
||||
auto tokens = tks.expandedTokens(
|
||||
{src.getLocForStartOfFile(mainid), src.getLocForEndOfFile(mainid)});
|
||||
auto mainid = src.getMainFileID();
|
||||
auto tokens =
|
||||
tks.expandedTokens({src.getLocForStartOfFile(mainid), src.getLocForEndOfFile(mainid)});
|
||||
|
||||
auto eof = tokens.back().endLocation();
|
||||
txs.expect("eof", eof);
|
||||
auto eof = tokens.back().endLocation();
|
||||
|
||||
{
|
||||
SourceConverter cvtr{proto::PositionEncodingKind::UTF8};
|
||||
auto pos = cvtr.toPosition(eof, src);
|
||||
EXPECT_EQ(pos.line, 0);
|
||||
EXPECT_EQ(pos.character, 19);
|
||||
}
|
||||
{
|
||||
SourceConverter cvtr{proto::PositionEncodingKind::UTF8};
|
||||
auto pos = cvtr.toPosition(eof, src);
|
||||
EXPECT_EQ(pos.line, 0);
|
||||
EXPECT_EQ(pos.character, 19);
|
||||
}
|
||||
|
||||
{
|
||||
SourceConverter cvtr{proto::PositionEncodingKind::UTF16};
|
||||
auto pos = cvtr.toPosition(eof, src);
|
||||
EXPECT_EQ(pos.line, 0);
|
||||
EXPECT_EQ(pos.character, 19);
|
||||
}
|
||||
{
|
||||
SourceConverter cvtr{proto::PositionEncodingKind::UTF16};
|
||||
auto pos = cvtr.toPosition(eof, src);
|
||||
EXPECT_EQ(pos.line, 0);
|
||||
EXPECT_EQ(pos.character, 19);
|
||||
}
|
||||
|
||||
{
|
||||
SourceConverter cvtr{proto::PositionEncodingKind::UTF32};
|
||||
auto pos = cvtr.toPosition(eof, src);
|
||||
EXPECT_EQ(pos.line, 0);
|
||||
EXPECT_EQ(pos.character, 19);
|
||||
}
|
||||
{
|
||||
SourceConverter cvtr{proto::PositionEncodingKind::UTF32};
|
||||
auto pos = cvtr.toPosition(eof, src);
|
||||
EXPECT_EQ(pos.line, 0);
|
||||
EXPECT_EQ(pos.character, 19);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(SourceConverter, UriAndFsPath) {
|
||||
using SC = SourceConverter;
|
||||
using SC = SourceConverter;
|
||||
|
||||
// It must be a existed file.
|
||||
// It must be a existed file.
|
||||
#if defined(__unix__)
|
||||
llvm::StringRef paths[] = {"/dev/null"};
|
||||
llvm::StringRef uris[] = {"file:///dev/null"};
|
||||
llvm::StringRef paths[] = {"/dev/null"};
|
||||
llvm::StringRef uris[] = {"file:///dev/null"};
|
||||
#elif defined(_WIN32)
|
||||
llvm::StringRef paths[] = {"C:\\Windows\\System32\\notepad.exe"};
|
||||
llvm::StringRef uris[] = {"file:///C%3A/Windows/System32/notepad.exe"};
|
||||
llvm::StringRef paths[] = {"C:\\Windows\\System32\\notepad.exe"};
|
||||
llvm::StringRef uris[] = {"file:///C%3A/Windows/System32/notepad.exe"};
|
||||
#else
|
||||
#error "Unsupported platform"
|
||||
#endif
|
||||
|
||||
EXPECT_EQ(std::size(paths), std::size(uris));
|
||||
EXPECT_EQ(std::size(paths), std::size(uris));
|
||||
|
||||
for (int i = 0; i < std::size(paths); ++i) {
|
||||
llvm::outs() << ": " << SC::toURI(paths[i])<< "\n";
|
||||
llvm::outs() << ": " << SC::toPath(uris[i])<< "\n";
|
||||
EXPECT_EQ(SC::toURI(paths[i]), uris[i]);
|
||||
EXPECT_EQ(paths[i], SC::toPath(uris[i]));
|
||||
}
|
||||
for(int i = 0; i < std::size(paths); ++i) {
|
||||
llvm::outs() << ": " << SC::toURI(paths[i]) << "\n";
|
||||
llvm::outs() << ": " << SC::toPath(uris[i]) << "\n";
|
||||
EXPECT_EQ(SC::toURI(paths[i]), uris[i]);
|
||||
EXPECT_EQ(paths[i], SC::toPath(uris[i]));
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
} // namespace clice
|
||||
} // namespace clice::testing
|
||||
|
||||
Reference in New Issue
Block a user