Files
clice/unittests/Server/Indexer.cpp
2025-01-22 23:55:33 +08:00

48 lines
1.4 KiB
C++

#include "Test/Test.h"
#include "Server/Indexer.h"
namespace clice::testing {
TEST(Indexer, Basic) {
config::IndexOptions options;
options.dir = path::join(".", "temp");
auto error = fs::create_directories(options.dir);
CompilationDatabase database;
auto prefix = path::join(test_dir(), "indexer");
auto foo = path::real_path(path::join(prefix, "foo.cpp"));
auto main = path::real_path(path::join(prefix, "main.cpp"));
database.updateCommand(foo, std::format("clang++ {}", foo));
database.updateCommand(main, std::format("clang++ {}", main));
Indexer indexer(options, database);
indexer.loadFromDisk();
auto p1 = indexer.index(main);
auto p2 = indexer.index(foo);
async::run(p1, p2);
auto kind =
RelationKind(RelationKind::Reference, RelationKind::Definition, RelationKind::Declaration);
proto::DeclarationParams params{
.textDocument = {.uri = SourceConverter::toURI(foo)},
.position = {2, 5}
};
auto lookup = indexer.lookup(params, kind);
auto&& [result] = async::run(lookup);
indexer.saveToDisk();
Indexer indexer2(options, database);
indexer2.loadFromDisk();
auto lookup2 = indexer2.lookup(params, kind);
auto&& [result2] = async::run(lookup2);
print("Result: {}\n", json::serialize(result));
EXPECT_EQ(result, result2);
}
} // namespace clice::testing