mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-04 22:31:02 +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.
122 lines
4.1 KiB
C++
122 lines
4.1 KiB
C++
#include <catch2/catch_test_macros.hpp>
|
|
#include <catch2/catch_all.hpp>
|
|
|
|
#include <slic3r/GUI/WebMediaController.hpp>
|
|
|
|
#include <wx/colour.h>
|
|
#include <wx/gdicmn.h>
|
|
#include <wx/string.h>
|
|
#include <wx/sharedptr.h>
|
|
#include <wx/vector.h>
|
|
#include "slic3r/Utils/IPrinterAgent.hpp"
|
|
#include <wx/uri.h>
|
|
#include <wx/webview.h>
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
using namespace Slic3r;
|
|
using namespace Slic3r::GUI;
|
|
|
|
namespace {
|
|
|
|
class StubWebView final : public wxWebView
|
|
{
|
|
public:
|
|
bool SetBackgroundColour(const wxColour&) override
|
|
{
|
|
events.emplace_back("background");
|
|
return true;
|
|
}
|
|
|
|
bool Create(wxWindow*, wxWindowID, const wxString&, const wxPoint&, const wxSize&, long, const wxString&) override { return true; }
|
|
wxString GetCurrentTitle() const override { return {}; }
|
|
wxString GetCurrentURL() const override { return {}; }
|
|
bool IsBusy() const override { return false; }
|
|
bool IsEditable() const override { return false; }
|
|
void LoadURL(const wxString& url) override
|
|
{
|
|
events.emplace_back("url");
|
|
loaded_url = url.ToStdString();
|
|
}
|
|
void Print() override {}
|
|
void RegisterHandler(wxSharedPtr<wxWebViewHandler>) override {}
|
|
void Reload(wxWebViewReloadFlags) override {}
|
|
void SetEditable(bool) override {}
|
|
void Stop() override { events.emplace_back("stop"); }
|
|
bool CanGoBack() const override { return false; }
|
|
bool CanGoForward() const override { return false; }
|
|
void GoBack() override {}
|
|
void GoForward() override {}
|
|
void ClearHistory() override { events.emplace_back("history"); }
|
|
void EnableHistory(bool) override {}
|
|
wxVector<wxSharedPtr<wxWebViewHistoryItem>> GetBackwardHistory() override { return {}; }
|
|
wxVector<wxSharedPtr<wxWebViewHistoryItem>> GetForwardHistory() override { return {}; }
|
|
void LoadHistoryItem(wxSharedPtr<wxWebViewHistoryItem>) override {}
|
|
bool CanSetZoomType(wxWebViewZoomType) const override { return false; }
|
|
float GetZoomFactor() const override { return 1.0f; }
|
|
wxWebViewZoomType GetZoomType() const override { return wxWEBVIEW_ZOOM_TYPE_LAYOUT; }
|
|
void SetZoomFactor(float) override {}
|
|
void SetZoomType(wxWebViewZoomType) override {}
|
|
bool CanUndo() const override { return false; }
|
|
bool CanRedo() const override { return false; }
|
|
void Undo() override {}
|
|
void Redo() override {}
|
|
void* GetNativeBackend() const override { return nullptr; }
|
|
|
|
bool RunScript(const wxString& javascript, wxString*) const override
|
|
{
|
|
events.emplace_back("script");
|
|
script = javascript.ToStdString();
|
|
return true;
|
|
}
|
|
|
|
protected:
|
|
void DoSetPage(const wxString& html, const wxString& base_url) override
|
|
{
|
|
events.emplace_back("page");
|
|
page = html.ToStdString();
|
|
page_base = base_url.ToStdString();
|
|
}
|
|
|
|
public:
|
|
mutable std::vector<std::string> events;
|
|
std::string page;
|
|
std::string page_base;
|
|
mutable std::string script;
|
|
std::string loaded_url;
|
|
};
|
|
|
|
} // namespace
|
|
|
|
TEST_CASE("Web media controller tears down a snapshot lifecycle", "[WebMediaController][integration]")
|
|
{
|
|
StubWebView view;
|
|
WebMediaController controller(&view);
|
|
|
|
controller.set_mode(CameraStreamMode::http_snapshot);
|
|
controller.Load(wxURI("http://camera.example/frame.jpg"));
|
|
controller.Play();
|
|
|
|
REQUIRE(view.events.size() == 3);
|
|
CHECK(view.events[0] == "background");
|
|
CHECK(view.events[1] == "page");
|
|
CHECK(view.events[2] == "page");
|
|
CHECK(view.page.find("stopCameraRefresh") != std::string::npos);
|
|
CHECK(view.page.find("http://camera.example/frame.jpg") != std::string::npos);
|
|
|
|
controller.Stop();
|
|
|
|
REQUIRE(view.events.size() == 7);
|
|
CHECK(view.events[3] == "script");
|
|
CHECK(view.events[4] == "stop");
|
|
CHECK(view.events[5] == "page");
|
|
CHECK(view.events[6] == "history");
|
|
CHECK(view.script == "if(typeof stopCameraRefresh==='function') stopCameraRefresh();");
|
|
CHECK(view.page.empty());
|
|
CHECK(view.page_base == "about:blank");
|
|
|
|
controller.Play();
|
|
CHECK(view.page.find("http://camera.example/frame.jpg") == std::string::npos);
|
|
}
|