From 5c9b571c70eeb0171affbce08b005a1d65765115 Mon Sep 17 00:00:00 2001 From: Chris Thrasher Date: Tue, 1 Mar 2022 23:02:38 -0600 Subject: [PATCH] Add tests for sf::VertexArray --- test/CMakeLists.txt | 1 + test/Graphics/VertexArray.cpp | 104 ++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 test/Graphics/VertexArray.cpp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index a67616ce..5bdd63ed 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -38,6 +38,7 @@ if(SFML_BUILD_GRAPHICS) Graphics/Transform.cpp Graphics/Transformable.cpp Graphics/Vertex.cpp + Graphics/VertexArray.cpp ) sfml_add_test(test-sfml-graphics "${GRAPHICS_SRC}" SFML::Graphics) endif() diff --git a/test/Graphics/VertexArray.cpp b/test/Graphics/VertexArray.cpp new file mode 100644 index 00000000..8c1ad01a --- /dev/null +++ b/test/Graphics/VertexArray.cpp @@ -0,0 +1,104 @@ +#include +#include "GraphicsUtil.hpp" + +#include + +TEST_CASE("sf::VertexArray class - [graphics]") +{ + SUBCASE("Construction") + { + SUBCASE("Default constructor") + { + const sf::VertexArray vertexArray; + CHECK(vertexArray.getVertexCount() == 0); + CHECK(vertexArray.getPrimitiveType() == sf::PrimitiveType::Points); + CHECK(vertexArray.getBounds() == sf::FloatRect({0, 0}, {0, 0})); + } + + SUBCASE("Explicit constructor with default argument") + { + const sf::VertexArray vertexArray(sf::PrimitiveType::Lines); + CHECK(vertexArray.getVertexCount() == 0); + CHECK(vertexArray.getPrimitiveType() == sf::PrimitiveType::Lines); + CHECK(vertexArray.getBounds() == sf::FloatRect({0, 0}, {0, 0})); + } + + SUBCASE("Explicit constructor") + { + const sf::VertexArray vertexArray(sf::PrimitiveType::Lines, 10); + CHECK(vertexArray.getVertexCount() == 10); + CHECK(vertexArray.getPrimitiveType() == sf::PrimitiveType::Lines); + CHECK(vertexArray.getBounds() == sf::FloatRect({0, 0}, {0, 0})); + for (std::size_t i = 0; i < vertexArray.getVertexCount(); ++i) + { + CHECK(vertexArray[i].position == sf::Vertex().position); + CHECK(vertexArray[i].color == sf::Vertex().color); + CHECK(vertexArray[i].texCoords == sf::Vertex().texCoords); + } + } + } + + SUBCASE("Resize array") + { + sf::VertexArray vertexArray; + vertexArray.resize(42); + CHECK(vertexArray.getVertexCount() == 42); + for (std::size_t i = 0; i < vertexArray.getVertexCount(); ++i) + { + CHECK(vertexArray[i].position == sf::Vertex().position); + CHECK(vertexArray[i].color == sf::Vertex().color); + CHECK(vertexArray[i].texCoords == sf::Vertex().texCoords); + } + } + + SUBCASE("Clear array") + { + sf::VertexArray vertexArray; + vertexArray.append({}); + vertexArray.clear(); + CHECK(vertexArray.getVertexCount() == 0); + } + + SUBCASE("Append to array") + { + sf::VertexArray vertexArray; + const sf::Vertex vertex({1, 2}, {3, 4, 5, 6}, {7, 8}); + vertexArray.append(vertex); + CHECK(vertexArray.getVertexCount() == 1); + CHECK(vertexArray[0].position == vertex.position); + CHECK(vertexArray[0].color == vertex.color); + CHECK(vertexArray[0].texCoords == vertex.texCoords); + } + + SUBCASE("Write to array") + { + sf::VertexArray vertexArray; + vertexArray.resize(10); + const sf::Vertex otherVertex({2, 3}, {4, 5, 6, 7}, {8, 9}); + vertexArray[9] = otherVertex; + CHECK(vertexArray[9].position == otherVertex.position); + CHECK(vertexArray[9].color == otherVertex.color); + CHECK(vertexArray[9].texCoords == otherVertex.texCoords); + } + + SUBCASE("Set primitive type") + { + sf::VertexArray vertexArray; + vertexArray.setPrimitiveType(sf::PrimitiveType::TriangleStrip); + CHECK(vertexArray.getPrimitiveType() == sf::PrimitiveType::TriangleStrip); + } + + SUBCASE("Get bounds") + { + sf::VertexArray vertexArray; + vertexArray.append(sf::Vertex({1, 1})); + vertexArray.append(sf::Vertex({2, 2})); + CHECK(vertexArray.getBounds() == sf::FloatRect({1, 1}, {1, 1})); + vertexArray[0] = sf::Vertex({0, 0}); + CHECK(vertexArray.getBounds() == sf::FloatRect({0, 0}, {2, 2})); + vertexArray[0] = sf::Vertex({5, 5}); + CHECK(vertexArray.getBounds() == sf::FloatRect({2, 2}, {3, 3})); + vertexArray.append(sf::Vertex({10, 10})); + CHECK(vertexArray.getBounds() == sf::FloatRect({2, 2}, {8, 8})); + } +}