paysages3d/src/tests/OverlayRasterizer_Test.cpp
2016-07-23 22:58:32 +02:00

63 lines
1.6 KiB
C++

#include "OverlayRasterizer.h"
#include "BaseTestCase.h"
#include "Color.h"
#include "Scenery.h"
#include "SoftwareCanvasRenderer.h"
#include <vector>
typedef struct {
int x;
int y;
double relx;
double rely;
} PixelCall;
static vector<PixelCall> calls;
namespace {
class MockOverlayRasterizer : public OverlayRasterizer {
public:
MockOverlayRasterizer(SoftwareCanvasRenderer *renderer) : OverlayRasterizer(renderer) {
}
virtual Color processPixel(int x, int y, double relx, double rely) const override {
PixelCall call = {x, y, relx, rely};
calls.push_back(call);
return COLOR_BLUE;
}
};
}
void checkCall(const PixelCall &call, int x, int y, double relx, double rely) {
EXPECT_EQ(x, call.x);
EXPECT_EQ(y, call.y);
EXPECT_DOUBLE_EQ(relx, call.relx);
EXPECT_DOUBLE_EQ(rely, call.rely);
}
TEST(OverlayRasterizer, pixelProcessing) {
calls.clear();
Scenery scenery;
SoftwareCanvasRenderer renderer(&scenery);
MockOverlayRasterizer rasterizer(&renderer);
renderer.setSize(4, 3);
renderer.setSoloRasterizer(&rasterizer);
renderer.render();
ASSERT_EQ(12u, calls.size());
checkCall(calls[0], 0, 0, -1.5, -1.0);
checkCall(calls[1], 0, 2, -1.5, 1.0);
checkCall(calls[2], 2, 0, 0.5, -1.0);
checkCall(calls[3], 2, 2, 0.5, 1.0);
checkCall(calls[4], 0, 1, -1.5, 0.0);
checkCall(calls[5], 1, 0, -0.5, -1.0);
checkCall(calls[6], 1, 1, -0.5, 0.0);
checkCall(calls[7], 1, 2, -0.5, 1.0);
checkCall(calls[8], 2, 1, 0.5, 0.0);
checkCall(calls[9], 3, 0, 1.5, -1.0);
checkCall(calls[10], 3, 1, 1.5, 0.0);
checkCall(calls[11], 3, 2, 1.5, 1.0);
}