Fix Windows diagnostic paths and schema fixture timeout
This commit is contained in:
@@ -23,5 +23,12 @@ if(BUILD_TESTING)
|
|||||||
target_link_libraries(faset_build_schema_tests PRIVATE faset_build_service faset_authoring faset_editor_commands)
|
target_link_libraries(faset_build_schema_tests PRIVATE faset_build_service faset_authoring faset_editor_commands)
|
||||||
add_dependencies(faset_build_schema_tests faset_build_schema_tool)
|
add_dependencies(faset_build_schema_tests faset_build_schema_tool)
|
||||||
add_test(NAME build_schema_publication COMMAND faset_build_schema_tests $<TARGET_FILE:faset_build_schema_tool> ${PROJECT_SOURCE_DIR})
|
add_test(NAME build_schema_publication COMMAND faset_build_schema_tests $<TARGET_FILE:faset_build_schema_tool> ${PROJECT_SOURCE_DIR})
|
||||||
set_tests_properties(build_schema_publication PROPERTIES TIMEOUT 60)
|
# This fixture performs many full cache invalidations and process launches.
|
||||||
|
# Windows runner startup and antivirus overhead exceed 60 seconds even when
|
||||||
|
# individual native fixture commands finish normally.
|
||||||
|
if(WIN32)
|
||||||
|
set_tests_properties(build_schema_publication PROPERTIES TIMEOUT 240)
|
||||||
|
else()
|
||||||
|
set_tests_properties(build_schema_publication PROPERTIES TIMEOUT 60)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -28,7 +28,9 @@ std::string strip_ansi(std::string_view text) {
|
|||||||
}
|
}
|
||||||
std::string normalize_path(std::string path) {
|
std::string normalize_path(std::string path) {
|
||||||
std::replace(path.begin(), path.end(), '\\', '/');
|
std::replace(path.begin(), path.end(), '\\', '/');
|
||||||
path = std::filesystem::path(path).lexically_normal().generic_string();
|
// Compiler output is UTF-8. Constructing a path from a narrow string on
|
||||||
|
// Windows can decode it through the process code page and lose Unicode.
|
||||||
|
path = generic_path_to_utf8(path_from_utf8(path).lexically_normal());
|
||||||
while (path.size() > 1 && path.back() == '/')
|
while (path.size() > 1 && path.back() == '/')
|
||||||
path.pop_back();
|
path.pop_back();
|
||||||
return path;
|
return path;
|
||||||
@@ -46,7 +48,7 @@ std::string project_source(std::string raw, const std::filesystem::path& project
|
|||||||
if (raw.starts_with("lua: "))
|
if (raw.starts_with("lua: "))
|
||||||
raw.erase(0, 5);
|
raw.erase(0, 5);
|
||||||
std::replace(raw.begin(), raw.end(), '\\', '/');
|
std::replace(raw.begin(), raw.end(), '\\', '/');
|
||||||
for (const auto& component : std::filesystem::path(raw))
|
for (const auto& component : path_from_utf8(raw))
|
||||||
if (component == "..")
|
if (component == "..")
|
||||||
return {};
|
return {};
|
||||||
const auto path = normalize_path(std::move(raw));
|
const auto path = normalize_path(std::move(raw));
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#include <faset/editor/build_diagnostics.hpp>
|
#include <faset/editor/build_diagnostics.hpp>
|
||||||
|
#include <faset/core/io.hpp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
@@ -25,7 +26,7 @@ void contracts() {
|
|||||||
rows[0].at("line") == 6 && rows[0].at("severity") == "error" &&
|
rows[0].at("line") == 6 && rows[0].at("severity") == "error" &&
|
||||||
rows[0].at("message") == "unexpected symbol near '='",
|
rows[0].at("message") == "unexpected symbol near '='",
|
||||||
"Lua syntax error and ANSI stripping work");
|
"Lua syntax error and ANSI stripping work");
|
||||||
const auto windows = fs::path(R"(C:\Café)");
|
const auto windows = path_from_utf8(R"(C:\Café)");
|
||||||
rows = editor::parse_build_diagnostics(
|
rows = editor::parse_build_diagnostics(
|
||||||
R"(C:\Café\Scripts\Game.cpp(17,4): error C2143: syntax error)" "\n"
|
R"(C:\Café\Scripts\Game.cpp(17,4): error C2143: syntax error)" "\n"
|
||||||
R"(C:\Café\Scripts\Game.cpp:19:2: warning: suspicious conversion)" "\n",
|
R"(C:\Café\Scripts\Game.cpp:19:2: warning: suspicious conversion)" "\n",
|
||||||
|
|||||||
Reference in New Issue
Block a user