123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- /*
- * Copyright (c) 2021, Itamar S. <itamar8910@gmail.com>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
- #include "Tests.h"
- #include "../FileDB.h"
- #include "ParserAutoComplete.h"
- using namespace LanguageServers;
- using namespace LanguageServers::Cpp;
- static bool s_some_test_failed = false;
- #define I_TEST(name) \
- { \
- printf("Testing " #name "... "); \
- fflush(stdout); \
- }
- #define PASS \
- do { \
- printf("PASS\n"); \
- fflush(stdout); \
- return; \
- } while (0)
- #define FAIL(reason) \
- do { \
- printf("FAIL: " #reason "\n"); \
- s_some_test_failed = true; \
- return; \
- } while (0)
- static void test_complete_local_args();
- static void test_complete_local_vars();
- static void test_complete_type();
- static void test_find_variable_definition();
- int run_tests()
- {
- test_complete_local_args();
- test_complete_local_vars();
- test_complete_type();
- test_find_variable_definition();
- return s_some_test_failed ? 1 : 0;
- }
- void test_complete_local_args()
- {
- I_TEST(Complete Local Args)
- FileDB filedb;
- String content = R"(
- int main(int argc, char** argv){
- ar
- }
- )";
- filedb.add("a.cpp", content);
- ParserAutoComplete autocomplete(filedb);
- auto suggestions = autocomplete.get_suggestions("a.cpp", { 2, 2 });
- if (suggestions.size() != 2)
- FAIL(bad size);
- if (suggestions[0].completion == "argc" && suggestions[1].completion == "argv")
- PASS;
- FAIL("wrong results");
- }
- void test_complete_local_vars()
- {
- I_TEST(Complete Local Vars)
- FileDB filedb;
- String content = R"(
- int main(int argc, char** argv){
- int myvar1 = 3;
- myv
- }
- )";
- filedb.add("a.cpp", content);
- ParserAutoComplete autocomplete(filedb);
- auto suggestions = autocomplete.get_suggestions("a.cpp", { 3, 3 });
- if (suggestions.size() != 1)
- FAIL(bad size);
- if (suggestions[0].completion == "myvar1")
- PASS;
- FAIL("wrong results");
- }
- void test_complete_type()
- {
- I_TEST(Complete Type)
- FileDB filedb;
- String content = R"(
- struct MyStruct {
- int x;
- }
- void foo(){
- MyS
- }
- )";
- filedb.add("a.cpp", content);
- ParserAutoComplete autocomplete(filedb);
- auto suggestions = autocomplete.get_suggestions("a.cpp", { 5, 3 });
- if (suggestions.size() != 1)
- FAIL(bad size);
- if (suggestions[0].completion == "MyStruct")
- PASS;
- FAIL("wrong results");
- }
- void test_find_variable_definition()
- {
- I_TEST(Find Variable Declaration)
- FileDB filedb;
- String content = R"(
- int main(int argc, char** argv){
- argv = nullptr;
- }
- )";
- filedb.add("a.cpp", content);
- ParserAutoComplete autocomplete(filedb);
- auto position = autocomplete.find_declaration_of("a.cpp", { 2, 1 });
- if (!position.has_value())
- FAIL("declaration not found");
- if (position.value().file == "a.cpp" && position.value().line == 1 && position.value().column >= 19)
- PASS;
- FAIL("wrong declaration location");
- }
|