diff --git a/Meta/build-root-filesystem.sh b/Meta/build-root-filesystem.sh index 9226ee5f6b..34e2f051f0 100755 --- a/Meta/build-root-filesystem.sh +++ b/Meta/build-root-filesystem.sh @@ -104,10 +104,12 @@ mkdir -p mnt/home/anon mkdir -p mnt/home/anon/Desktop mkdir -p mnt/home/anon/Downloads mkdir -p mnt/home/nona -rm -fr mnt/home/anon/js-tests mnt/home/anon/web-tests +rm -fr mnt/home/anon/js-tests mnt/home/anon/web-tests mnt/home/anon/cpp-tests +mkdir -p mnt/home/anon/cpp-tests/ cp "$SERENITY_SOURCE_DIR"/README.md mnt/home/anon/ cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibJS/Tests mnt/home/anon/js-tests cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibWeb/Tests mnt/home/anon/web-tests +cp -r "$SERENITY_SOURCE_DIR"/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests mnt/home/anon/cpp-tests/comprehension chmod 700 mnt/root chmod 700 mnt/home/anon chmod 700 mnt/home/nona diff --git a/Meta/check-style.sh b/Meta/check-style.sh index b32a2ff49c..b64c4c8696 100755 --- a/Meta/check-style.sh +++ b/Meta/check-style.sh @@ -12,7 +12,7 @@ cd "$script_path/.." || exit 1 # */ GOOD_LICENSE_HEADER_PATTERN=$'^/\*\n( \* Copyright \(c\) [0-9]{4}(-[0-9]{4})?, .*\n)+ \*\n \* SPDX-License-Identifier: BSD-2-Clause\n \*/\n\n' BAD_LICENSE_HEADER_ERRORS=() -LICENSE_HEADER_CHECK_EXCUDES=(AK/Checked.h AK/Function.h Userland/Libraries/LibC/elf.h) +LICENSE_HEADER_CHECK_EXCLUDES=(AK/Checked.h AK/Function.h Userland/Libraries/LibC/elf.h Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests/*) # We check that "#pragma once" is present PRAGMA_ONCE_PATTERN='#pragma once' @@ -28,7 +28,7 @@ LIBM_MATH_H_INCLUDE_ERRORS=() while IFS= read -r f; do file_content="$(< "$f")" - if [[ ! "${LICENSE_HEADER_CHECK_EXCUDES[*]} " =~ $f ]]; then + if [[ ! "${LICENSE_HEADER_CHECK_EXCLUDES[*]} " =~ $f ]]; then if [[ ! "$file_content" =~ $GOOD_LICENSE_HEADER_PATTERN ]]; then BAD_LICENSE_HEADER_ERRORS+=("$f") fi diff --git a/Meta/lint-clang-format.sh b/Meta/lint-clang-format.sh index d2f0d333b6..7542a77695 100755 --- a/Meta/lint-clang-format.sh +++ b/Meta/lint-clang-format.sh @@ -12,7 +12,8 @@ if [ "$#" -eq "1" ]; then '*.h' \ ':!:Base' \ ':!:Kernel/FileSystem/ext2_fs.h' \ - ':!:Userland/Libraries/LibC/syslog.h' + ':!:Userland/Libraries/LibC/syslog.h' \ + ':!:Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests/*' ) else files=() diff --git a/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests.cpp b/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests.cpp index 7f69238596..70112f04d1 100644 --- a/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests.cpp +++ b/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests.cpp @@ -7,6 +7,8 @@ #include "Tests.h" #include "../FileDB.h" #include "CppComprehensionEngine.h" +#include +#include using namespace LanguageServers; using namespace LanguageServers::Cpp; @@ -33,6 +35,8 @@ static bool s_some_test_failed = false; return; \ } while (0) +constexpr char TESTS_ROOT_DIR[] = "/home/anon/cpp-tests/comprehension"; + static void test_complete_local_args(); static void test_complete_local_vars(); static void test_complete_type(); @@ -47,18 +51,20 @@ int run_tests() return s_some_test_failed ? 1 : 0; } +static void add_file(FileDB& filedb, const String& name) +{ + auto file = Core::File::open(LexicalPath::join(TESTS_ROOT_DIR, name).string(), Core::OpenMode::ReadOnly); + VERIFY(!file.is_error()); + filedb.add(name, file.value()->fd()); +} + 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); + add_file(filedb, "complete_local_args.cpp"); CppComprehensionEngine engine(filedb); - auto suggestions = engine.get_suggestions("a.cpp", { 2, 2 }); + auto suggestions = engine.get_suggestions("complete_local_args.cpp", { 2, 6 }); if (suggestions.size() != 2) FAIL(bad size); @@ -72,15 +78,9 @@ 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); + add_file(filedb, "complete_local_vars.cpp"); CppComprehensionEngine autocomplete(filedb); - auto suggestions = autocomplete.get_suggestions("a.cpp", { 3, 3 }); + auto suggestions = autocomplete.get_suggestions("complete_local_vars.cpp", { 3, 7 }); if (suggestions.size() != 1) FAIL(bad size); @@ -94,17 +94,9 @@ 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); + add_file(filedb, "complete_type.cpp"); CppComprehensionEngine autocomplete(filedb); - auto suggestions = autocomplete.get_suggestions("a.cpp", { 5, 3 }); + auto suggestions = autocomplete.get_suggestions("complete_type.cpp", { 5, 7 }); if (suggestions.size() != 1) FAIL(bad size); @@ -118,18 +110,13 @@ 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); + add_file(filedb, "find_variable_declaration.cpp"); CppComprehensionEngine engine(filedb); - auto position = engine.find_declaration_of("a.cpp", { 2, 1 }); + auto position = engine.find_declaration_of("find_variable_declaration.cpp", { 2, 5 }); if (!position.has_value()) FAIL("declaration not found"); - if (position.value().file == "a.cpp" && position.value().line == 1 && position.value().column >= 19) + if (position.value().file == "find_variable_declaration.cpp" && position.value().line == 0 && position.value().column >= 19) PASS; FAIL("wrong declaration location"); } diff --git a/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests/complete_local_args.cpp b/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests/complete_local_args.cpp new file mode 100644 index 0000000000..893bed6c54 --- /dev/null +++ b/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests/complete_local_args.cpp @@ -0,0 +1,4 @@ +int main(int argc, char** argv) +{ + ar +} diff --git a/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests/complete_local_vars.cpp b/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests/complete_local_vars.cpp new file mode 100644 index 0000000000..02f53b5631 --- /dev/null +++ b/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests/complete_local_vars.cpp @@ -0,0 +1,5 @@ +int main(int argc, char** argv) +{ + int myvar1 = 3; + myv +} diff --git a/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests/complete_type.cpp b/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests/complete_type.cpp new file mode 100644 index 0000000000..a552ad8cbf --- /dev/null +++ b/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests/complete_type.cpp @@ -0,0 +1,7 @@ +struct MyStruct { + int x; +}; +void foo() +{ + MyS +} diff --git a/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests/find_variable_declaration.cpp b/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests/find_variable_declaration.cpp new file mode 100644 index 0000000000..22f20d2f34 --- /dev/null +++ b/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests/find_variable_declaration.cpp @@ -0,0 +1,4 @@ +int main(int argc, char** argv) +{ + argv = nullptr; +}