mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-04 14:20:58 +00:00
* Ignore Clipper, libpng, mcut and Boost.Polygon Internals in clang-tidy Each only works through a wrapper or umbrella header: libslic3r/clipper.hpp or clipper_z.hpp configure Clipper before including it, png.h pulls in libpng's config headers, and Boost.Polygon's headers only compile through polygon.hpp or voronoi.hpp. * Ignore minilzo's Config Headers in clang-tidy lzoconf.h and lzodefs.h are internal to minilzo.h, which is what the code includes. * Add Missing Includes Across the Remaining Sources and Tests Covers src/slic3r/Utils, src/slic3r/plugin, src/slic3r/Config, src/libvgcode, src/dev-utils, src/OrcaSlicer.cpp and tests/, the directories left after src/slic3r/GUI and src/libslic3r. Generated with clang-tidy misc-include-cleaner. libvgcode's own headers are included by relative path as in the rest of that library, and Catch2 and pybind11 with angle brackets as elsewhere in the repo. * Make the GUI and Test Headers Compile on Their Own Each now includes, or forward-declares, what it uses instead of relying on what its includers happened to include first. Headers that only compile on one platform, or that nothing built includes, are left alone. * Keep Windows and nanosvg Setup Ahead of the Added Includes OrcaSlicer.cpp and several tests set _WIN32_WINNT, WIN32_LEAN_AND_MEAN or NOMINMAX before including Windows.h, and the profile validator defines NANOSVG_IMPLEMENTATION before any libslic3r header. The added includes had landed above those blocks, which broke the Windows build. * Add the GUI Includes the First Pass Missed Covers headers that only became editable once they compiled on their own, and wx symbols whose suggested header changed as the clang-tidy ignore list grew after the src/slic3r/GUI pass. * Keep the Added Test Includes Below the NOMINMAX Guard test_marchingsquares.cpp and test_texture_displacement.cpp had includes inside #ifndef NOMINMAX, which the tests inherit as defined on Windows from libslic3r, so those were skipped there. .clang-tidy also ignores the MSVC STL and UCRT internals, Boost.Multiprecision's fwd.hpp and CPython's Windows include directory, as in #16068.
78 lines
3.4 KiB
C++
78 lines
3.4 KiB
C++
#include <catch2/catch_test_macros.hpp>
|
|
#include <catch2/generators/catch_generators.hpp>
|
|
|
|
#include <catch2/catch_message.hpp>
|
|
#include "slic3r/GUI/GUI.hpp"
|
|
|
|
#include <boost/filesystem/path.hpp>
|
|
|
|
#include <string>
|
|
#include <wx/string.h>
|
|
#include <wx/uri.h>
|
|
|
|
using namespace Slic3r::GUI;
|
|
|
|
#ifndef _WIN32
|
|
TEST_CASE("A file URL keeps characters special to URLs in its path", "[FileUrl]")
|
|
{
|
|
const std::string path = GENERATE(as<std::string>{},
|
|
"/opt/test#dir/resources/web/homepage/index.html",
|
|
"/opt/test%20x/resources/web/homepage/index.html",
|
|
"/opt/Orca Slicer/resources/web/homepage/index.html",
|
|
"/opt/what?/resources/web/homepage/index.html",
|
|
"/home/Jos\xC3\xA9/\xE8\xB5\x84\xE6\xBA\x90/resources/web/homepage/index.html");
|
|
|
|
const wxString url = file_url_from_path(boost::filesystem::path(path));
|
|
CAPTURE(path, url.utf8_string());
|
|
|
|
// WebView::CreateWebView() and WebView::LoadUrl() re-parse the URL before loading it.
|
|
const wxURI uri(wxURI(url).BuildURI());
|
|
CHECK(uri.GetScheme() == "file");
|
|
CHECK(!uri.HasQuery());
|
|
CHECK(!uri.HasFragment());
|
|
CHECK(wxURI::Unescape(uri.GetPath()).utf8_string() == path);
|
|
}
|
|
|
|
TEST_CASE("A file URL of a plain path is the path behind file://", "[FileUrl]")
|
|
{
|
|
const std::string path = "/opt/OrcaSlicer/resources/web/homepage/index.html";
|
|
CHECK(file_url_from_path(boost::filesystem::path(path)) == "file://" + path);
|
|
}
|
|
|
|
TEST_CASE("A query appended to a file URL stays separate from its path", "[FileUrl]")
|
|
{
|
|
const std::string path = "/opt/test#dir%20x/resources/web/guide/0/index.html";
|
|
const wxURI uri(file_url_from_path(boost::filesystem::path(path)) + "?target=21&lang=de");
|
|
CHECK(wxURI::Unescape(uri.GetPath()).utf8_string() == path);
|
|
CHECK(uri.GetQuery() == "target=21&lang=de");
|
|
CHECK(!uri.HasFragment());
|
|
}
|
|
#else
|
|
TEST_CASE("A file URL of a Windows path has a drive letter and forward slashes", "[FileUrl]")
|
|
{
|
|
const auto [path, url] = GENERATE(table<std::wstring, std::string>({
|
|
{ L"C:\\Program Files\\OrcaSlicer\\resources\\web\\homepage\\index.html",
|
|
"file:///C:/Program%20Files/OrcaSlicer/resources/web/homepage/index.html" },
|
|
{ L"D:\\#OneDrive\\OrcaSlicer\\resources\\web\\guide\\0\\index.html",
|
|
"file:///D:/%23OneDrive/OrcaSlicer/resources/web/guide/0/index.html" },
|
|
{ L"D:\\100%\\OrcaSlicer\\resources\\web\\homepage\\index.html",
|
|
"file:///D:/100%25/OrcaSlicer/resources/web/homepage/index.html" },
|
|
// Callers join the resources directory with a forward-slash relative path.
|
|
{ L"D:\\#OneDrive\\OrcaSlicer\\resources/web/homepage/index.html",
|
|
"file:///D:/%23OneDrive/OrcaSlicer/resources/web/homepage/index.html" },
|
|
{ L"\\\\server\\share\\OrcaSlicer\\resources\\web\\homepage\\index.html",
|
|
"file://server/share/OrcaSlicer/resources/web/homepage/index.html" },
|
|
}));
|
|
CHECK(file_url_from_path(boost::filesystem::path(path)).utf8_string() == url);
|
|
}
|
|
|
|
TEST_CASE("A query appended to a Windows file URL stays separate from its path", "[FileUrl]")
|
|
{
|
|
const wxURI uri(file_url_from_path(boost::filesystem::path(L"D:\\#OneDrive\\OrcaSlicer\\resources\\web\\guide\\0\\index.html")) +
|
|
"?target=21&lang=de");
|
|
CHECK(wxURI::Unescape(uri.GetPath()) == "/D:/#OneDrive/OrcaSlicer/resources/web/guide/0/index.html");
|
|
CHECK(uri.GetQuery() == "target=21&lang=de");
|
|
CHECK(!uri.HasFragment());
|
|
}
|
|
#endif
|