Browse Source

UnitTests: Add filter support to tests interface, test filter generate and release

Michael Ragazzon 1 year ago
parent
commit
13b60d13b2

+ 30 - 1
Tests/Source/Common/TestsInterface.cpp

@@ -114,7 +114,8 @@ void TestsRenderInterface::EnableClipMask(bool /*enable*/)
 	counters.enable_clip_mask += 1;
 }
 
-void TestsRenderInterface::RenderToClipMask(Rml::ClipMaskOperation /*mask_operation*/, Rml::CompiledGeometryHandle /*geometry*/, Rml::Vector2f /*translation*/)
+void TestsRenderInterface::RenderToClipMask(Rml::ClipMaskOperation /*mask_operation*/, Rml::CompiledGeometryHandle /*geometry*/,
+	Rml::Vector2f /*translation*/)
 {
 	counters.render_to_clip_mask += 1;
 }
@@ -142,3 +143,31 @@ void TestsRenderInterface::SetTransform(const Rml::Matrix4f* /*transform*/)
 {
 	counters.set_transform += 1;
 }
+
+Rml::CompiledFilterHandle TestsRenderInterface::CompileFilter(const Rml::String& /*name*/, const Rml::Dictionary& /*parameters*/)
+{
+	counters.compile_filter += 1;
+	return 1;
+}
+
+void TestsRenderInterface::ReleaseCompiledFilter(Rml::CompiledFilterHandle /*filter*/)
+{
+	counters.release_filter += 1;
+}
+
+Rml::CompiledShaderHandle TestsRenderInterface::CompileShader(const Rml::String& /*name*/, const Rml::Dictionary& /*parameters*/)
+{
+	counters.compile_shader += 1;
+	return 1;
+}
+
+void TestsRenderInterface::RenderShader(Rml::CompiledShaderHandle /*shader*/, Rml::CompiledGeometryHandle /*geometry*/, Rml::Vector2f /*translation*/,
+	Rml::TextureHandle /*texture*/)
+{
+	counters.render_shader += 1;
+}
+
+void TestsRenderInterface::ReleaseCompiledShader(Rml::CompiledShaderHandle /*shader*/)
+{
+	counters.release_shader += 1;
+}

+ 13 - 0
Tests/Source/Common/TestsInterface.h

@@ -68,6 +68,11 @@ public:
 		size_t enable_clip_mask;
 		size_t render_to_clip_mask;
 		size_t set_transform;
+		size_t compile_filter;
+		size_t release_filter;
+		size_t compile_shader;
+		size_t render_shader;
+		size_t release_shader;
 	};
 
 	Rml::CompiledGeometryHandle CompileGeometry(Rml::Span<const Rml::Vertex> vertices, Rml::Span<const int> indices) override;
@@ -86,6 +91,14 @@ public:
 
 	void SetTransform(const Rml::Matrix4f* transform) override;
 
+	Rml::CompiledFilterHandle CompileFilter(const Rml::String& name, const Rml::Dictionary& parameters) override;
+	void ReleaseCompiledFilter(Rml::CompiledFilterHandle filter) override;
+
+	Rml::CompiledShaderHandle CompileShader(const Rml::String& name, const Rml::Dictionary& parameters) override;
+	void RenderShader(Rml::CompiledShaderHandle shader, Rml::CompiledGeometryHandle geometry, Rml::Vector2f translation,
+		Rml::TextureHandle texture) override;
+	void ReleaseCompiledShader(Rml::CompiledShaderHandle shader) override;
+
 	const Counters& GetCounters() const { return counters; }
 	void ResetCounters() { counters = {}; }
 

+ 15 - 2
Tests/Source/UnitTests/Filter.cpp

@@ -26,6 +26,7 @@
  *
  */
 
+#include "../Common/TestsInterface.h"
 #include "../Common/TestsShell.h"
 #include <RmlUi/Core/CompiledFilterShader.h>
 #include <RmlUi/Core/Context.h>
@@ -35,6 +36,7 @@
 #include <RmlUi/Core/Filter.h>
 #include <RmlUi/Core/PropertyDefinition.h>
 #include <RmlUi/Core/PropertyDictionary.h>
+#include <RmlUi/Core/RenderManager.h>
 #include <algorithm>
 #include <doctest.h>
 
@@ -54,7 +56,7 @@ public:
 	CompiledFilter CompileFilter(Element* element) const override
 	{
 		compiled_test_filters.push_back({element->GetId(), this});
-		return CompiledFilter();
+		return element->GetRenderManager()->CompileFilter("FilterTest", {});
 	}
 
 	float value = 0.f;
@@ -125,6 +127,8 @@ TEST_CASE("filter")
 	Context* context = TestsShell::GetContext();
 	REQUIRE(context);
 
+	TestsShell::GetTestsRenderInterface()->ResetCounters();
+
 	FilterTestInstancer instancer;
 	Rml::Factory::RegisterFilterInstancer("test", &instancer);
 
@@ -165,8 +169,17 @@ TEST_CASE("filter")
 
 	// Filters aren't cached like decorators are, so each element will instance a new decorator even if they refer to
 	// the same style rule. Thus, here producing 4 instead of 3 unique instances.
-	CHECK(instancer.num_instances == 4);
+	CHECK(instancer.num_instances == expected_compiled_filters.size());
+
+	auto& counters = TestsShell::GetTestsRenderInterface()->GetCounters();
+	CHECK(counters.compile_filter == expected_compiled_filters.size());
+	CHECK(counters.release_filter == 0);
 
 	document->Close();
+	context->Update();
+
+	CHECK(counters.compile_filter == expected_compiled_filters.size());
+	CHECK(counters.release_filter == expected_compiled_filters.size());
+
 	TestsShell::ShutdownShell();
 }