94 lines
2.3 KiB
C++
94 lines
2.3 KiB
C++
#include "../Test.h"
|
|
#include "Basic/SourceConverter.h"
|
|
|
|
namespace clice {
|
|
|
|
namespace {
|
|
|
|
TEST(SourceConverter, Remeasure) {
|
|
using SC = SourceConverter;
|
|
|
|
SourceConverter utf8{proto::PositionEncodingKind::UTF8};
|
|
|
|
EXPECT_EQ(utf8.remeasure(""), 0);
|
|
EXPECT_EQ(utf8.remeasure("ascii"), 5);
|
|
|
|
SourceConverter utf16{proto::PositionEncodingKind::UTF16};
|
|
|
|
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);
|
|
}
|
|
|
|
TEST(SourceConverter, Position) {
|
|
const char* main = "int a /*😂*/ = 1;$(eof)";
|
|
|
|
Tester txs("main.cpp", main);
|
|
txs.run("-std=c++11");
|
|
|
|
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 eof = tokens.back().endLocation();
|
|
txs.expect("eof", eof);
|
|
|
|
{
|
|
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::UTF32};
|
|
auto pos = cvtr.toPosition(eof, src);
|
|
EXPECT_EQ(pos.line, 0);
|
|
EXPECT_EQ(pos.character, 19);
|
|
}
|
|
}
|
|
|
|
TEST(SourceConverter, UriAndFsPath) {
|
|
using SC = SourceConverter;
|
|
|
|
// It must be a existed file.
|
|
#ifdef unix
|
|
const char* fspath[] = {"/dev/null"};
|
|
const char* uri[] = {"file:///dev/null"};
|
|
#else
|
|
const char* fspath[] = {};
|
|
const char* uri[] = {};
|
|
#endif
|
|
EXPECT_EQ(std::size(fspath), std::size(uri));
|
|
|
|
for(int i = 0; i < std::size(fspath); ++i) {
|
|
auto fspath_ = fspath[i];
|
|
auto uri_ = uri[i];
|
|
|
|
auto uri1 = SC::toURI(fspath_);
|
|
EXPECT_EQ(uri1, uri_);
|
|
|
|
auto fspath2 = SC::toPath(uri_);
|
|
EXPECT_EQ(fspath2, fspath_);
|
|
}
|
|
}
|
|
|
|
} // namespace
|
|
|
|
} // namespace clice
|
|
|