mirror of
https://github.com/SFML/SFML.git
synced 2024-11-25 04:41:05 +08:00
Add a graphical test for RectangleShape
This commit is contained in:
parent
37ac80dbe5
commit
a0c6381c2b
@ -1,7 +1,10 @@
|
||||
#include <SFML/Graphics/Image.hpp>
|
||||
#include <SFML/Graphics/RectangleShape.hpp>
|
||||
#include <SFML/Graphics/RenderTexture.hpp>
|
||||
|
||||
#include <catch2/catch_test_macros.hpp>
|
||||
|
||||
#include <GraphicsUtil.hpp>
|
||||
#include <SystemUtil.hpp>
|
||||
#include <type_traits>
|
||||
|
||||
@ -46,4 +49,25 @@ TEST_CASE("[Graphics] sf::RectangleShape")
|
||||
CHECK(rectangle.getSize() == sf::Vector2f(5, 4));
|
||||
CHECK(rectangle.getGeometricCenter() == sf::Vector2f(5.f, 4.f) / 2.f);
|
||||
}
|
||||
|
||||
SUBCASE("Render rectangle shape")
|
||||
{
|
||||
sf::RectangleShape rectangle({50.f, 20.f});
|
||||
rectangle.setFillColor(sf::Color::Red);
|
||||
rectangle.setOutlineColor(sf::Color::Green);
|
||||
rectangle.setOutlineThickness(2.f);
|
||||
rectangle.setPosition({10.f, 10.f});
|
||||
|
||||
sf::RenderTexture renderTexture;
|
||||
REQUIRE(renderTexture.create({100, 100}));
|
||||
|
||||
renderTexture.clear();
|
||||
renderTexture.draw(rectangle);
|
||||
renderTexture.display();
|
||||
|
||||
auto image = renderTexture.getTexture().copyToImage();
|
||||
REQUIRE(image.saveToFile("testOutput.png"));
|
||||
|
||||
REQUIRE(compareImages("expected/rectangleShape.png", "testOutput.png"));
|
||||
}
|
||||
}
|
||||
|
BIN
test/Graphics/expected/rectangleShape.png
Normal file
BIN
test/Graphics/expected/rectangleShape.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 566 B |
@ -1,5 +1,6 @@
|
||||
#include <SFML/Graphics/BlendMode.hpp>
|
||||
#include <SFML/Graphics/Color.hpp>
|
||||
#include <SFML/Graphics/Image.hpp>
|
||||
#include <SFML/Graphics/Rect.hpp>
|
||||
#include <SFML/Graphics/StencilMode.hpp>
|
||||
#include <SFML/Graphics/Transform.hpp>
|
||||
@ -113,3 +114,40 @@ bool operator==(const sf::Transform& lhs, const Approx<sf::Transform>& rhs)
|
||||
lhs.getMatrix()[7] == Approx(rhs.value.getMatrix()[7]) &&
|
||||
lhs.getMatrix()[15] == Approx(rhs.value.getMatrix()[15]);
|
||||
}
|
||||
|
||||
bool compareImages(const std::string& expected, const std::string& actual)
|
||||
{
|
||||
sf::Image image1;
|
||||
if (!image1.loadFromFile(expected))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
sf::Image image2;
|
||||
if (!image2.loadFromFile(actual))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (image1.getSize() != image2.getSize())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
auto size = image1.getSize();
|
||||
|
||||
double totalDiff = 0;
|
||||
for (unsigned int y = 0; y < size.y; ++y)
|
||||
{
|
||||
for (unsigned int x = 0; x < size.x; ++x)
|
||||
{
|
||||
unsigned int index = ((y * x) + x) * 4;
|
||||
totalDiff += std::abs(int(image1.getPixelsPtr()[index + 0]) - int(image2.getPixelsPtr()[index + 0])) / 255.0;
|
||||
totalDiff += std::abs(int(image1.getPixelsPtr()[index + 1]) - int(image2.getPixelsPtr()[index + 1])) / 255.0;
|
||||
totalDiff += std::abs(int(image1.getPixelsPtr()[index + 2]) - int(image2.getPixelsPtr()[index + 2])) / 255.0;
|
||||
}
|
||||
}
|
||||
|
||||
const double diffPercentage = (totalDiff * 100) / (size.x * size.y * 3);
|
||||
return diffPercentage <= 1.;
|
||||
}
|
||||
|
@ -29,6 +29,8 @@ std::ostream& operator<<(std::ostream& os, const Rect<T>& rect);
|
||||
|
||||
bool operator==(const sf::Transform& lhs, const Approx<sf::Transform>& rhs);
|
||||
|
||||
bool compareImages(const std::string& expected, const std::string& actual);
|
||||
|
||||
template <typename T>
|
||||
bool operator==(const sf::Rect<T>& lhs, const Approx<sf::Rect<T>>& rhs)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user