Files
pdf/engine/tests/graphics_state_test.cpp
T
2026-05-22 15:49:10 +05:30

65 lines
1.7 KiB
C++

#include <gtest/gtest.h>
#include <pdfengine/graphics_state.hpp>
using namespace pdfengine;
TEST(MatrixTest, DefaultIdentity) {
Matrix m;
EXPECT_FLOAT_EQ(m.a, 1.0f);
EXPECT_FLOAT_EQ(m.b, 0.0f);
EXPECT_FLOAT_EQ(m.c, 0.0f);
EXPECT_FLOAT_EQ(m.d, 1.0f);
EXPECT_FLOAT_EQ(m.e, 0.0f);
EXPECT_FLOAT_EQ(m.f, 0.0f);
}
TEST(MatrixTest, Multiply) {
Matrix m1(2.0f, 0.0f, 0.0f, 2.0f, 10.0f, 20.0f);
Matrix m2(0.5f, 0.0f, 0.0f, 0.5f, -5.0f, -10.0f);
Matrix result = m1.multiply(m2);
EXPECT_FLOAT_EQ(result.a, 1.0f);
EXPECT_FLOAT_EQ(result.b, 0.0f);
EXPECT_FLOAT_EQ(result.c, 0.0f);
EXPECT_FLOAT_EQ(result.d, 1.0f);
EXPECT_FLOAT_EQ(result.e, 0.0f);
EXPECT_FLOAT_EQ(result.f, 0.0f);
}
TEST(MatrixTest, TransformPoint) {
Matrix m(2.0f, 0.0f, 0.0f, 3.0f, 10.0f, 20.0f);
float x = 5.0f;
float y = 5.0f;
m.transform(x, y);
EXPECT_FLOAT_EQ(x, 20.0f); // 2*5 + 10
EXPECT_FLOAT_EQ(y, 35.0f); // 3*5 + 20
}
TEST(GraphicsStateStackTest, PushPop) {
GraphicsStateStack stack;
// Initial state
stack.current().lineWidth = 5.0f;
// Push new state
stack.push();
EXPECT_FLOAT_EQ(stack.current().lineWidth, 5.0f);
// Modify current state
stack.current().lineWidth = 10.0f;
EXPECT_FLOAT_EQ(stack.current().lineWidth, 10.0f);
// Pop back to initial
stack.pop();
EXPECT_FLOAT_EQ(stack.current().lineWidth, 5.0f);
}
TEST(GraphicsStateStackTest, PopEmptyProtection) {
GraphicsStateStack stack;
// Attempting to pop the root state should be safe (ignored)
stack.pop();
stack.current().lineWidth = 2.0f; // Should still be valid
EXPECT_FLOAT_EQ(stack.current().lineWidth, 2.0f);
}