module; export module lsp.test.provider.main; import std; import lsp.test.framework; import lsp.test.provider.completion; import lsp.test.provider.definitions; import lsp.test.provider.interpreter; import lsp.test.provider.json_flow; import lsp.test.provider.json_provider_coverage; import lsp.test.provider.misc; import lsp.test.provider.surface; import lsp.test.provider.fixtures; export int Run(int argc, char** argv) { if (argc > 0 && argv && argv[0]) { lsp::test::provider::SetExecutablePath(std::filesystem::absolute(argv[0]).string()); } for (int i = 1; i < argc; ++i) { std::string_view arg(argv[i]); if (arg == "--exit-provider") { return lsp::test::provider::RunExitProviderChild(); } constexpr std::string_view kInterpreterPrefix = "--interpreter="; if (arg.starts_with(kInterpreterPrefix)) { lsp::test::provider::SetInterpreterPath(std::string(arg.substr(kInterpreterPrefix.size()))); } } lsp::test::TestRunner runner; std::cout << "\n========================================" << std::endl; std::cout << " LSP Provider Test Suite" << std::endl; std::cout << "========================================\n" << std::endl; std::cout << "Registering tests..." << std::endl; std::cout << " - Completion tests" << std::endl; lsp::test::provider::CompletionTests::Register(runner); std::cout << " - Definition tests" << std::endl; lsp::test::provider::DefinitionTests::Register(runner); std::cout << " - Interpreter tests" << std::endl; lsp::test::provider::InterpreterTests::Register(runner); std::cout << " - JSON flow tests" << std::endl; lsp::test::provider::JsonFlowTests::Register(runner); std::cout << " - JSON provider coverage tests" << std::endl; lsp::test::provider::JsonProviderCoverageTests::Register(runner); std::cout << " - Other provider tests" << std::endl; lsp::test::provider::ProviderMiscTests::Register(runner); std::cout << " - Provider surface tests" << std::endl; lsp::test::provider::ProviderSurfaceTests::Register(runner); runner.runAllTests(); return runner.getFailedCount(); }