From 066a28d2c19c5d09a7a8f27543a8c171c5816cf5 Mon Sep 17 00:00:00 2001 From: "commit-bot@chromium.org" Date: Tue, 8 Apr 2014 17:31:08 +0000 Subject: Start on some unwritten SkRecord TODOs: - add SK_OVERRIDE for SkCanvas methods in SkRecorder - start on unit tests, here just for SkRecord itself BUG=skia:2378 R=fmalita@google.com, mtklein@google.com, fmalita@chromium.org Author: mtklein@chromium.org Review URL: https://codereview.chromium.org/228723003 git-svn-id: http://skia.googlecode.com/svn/trunk@14097 2bbb7eff-a529-9590-31e7-b0007b416f81 --- tests/RecordTest.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 tests/RecordTest.cpp (limited to 'tests') diff --git a/tests/RecordTest.cpp b/tests/RecordTest.cpp new file mode 100644 index 0000000000..1214b1a5de --- /dev/null +++ b/tests/RecordTest.cpp @@ -0,0 +1,48 @@ +#include "Test.h" + +#include "SkRecord.h" +#include "SkRecords.h" + +// Adds the area of any DrawRect command it sees into area. +class AreaSummer { +public: + explicit AreaSummer(int* area) : fArea(area) {} + + template void operator()(const T&) { } + +private: + int* fArea; +}; +template <> void AreaSummer::operator()(const SkRecords::DrawRect& record) { + *fArea += (int) (record.rect.width() * record.rect.height()); +} + +// Scales out the bottom-right corner of any DrawRect command it sees by 2x. +struct Stretch { + template void operator()(T*) {} +}; +template <> void Stretch::operator()(SkRecords::DrawRect* record) { + record->rect.fRight *= 2; + record->rect.fBottom *= 2; +} + +// Basic tests for the low-level SkRecord code. +DEF_TEST(Record, r) { + SkRecord record; + + // Add a simple DrawRect command. + SkRect rect = SkRect::MakeWH(10, 10); + SkPaint paint; + SkNEW_PLACEMENT_ARGS(record.append(), SkRecords::DrawRect, (rect, paint)); + + // Its area should be 100. + int area = 0; + record.visit(AreaSummer(&area)); + REPORTER_ASSERT(r, area == 100); + + // Scale 2x. Now it's area should be 400. + record.mutate(Stretch()); + area = 0; + record.visit(AreaSummer(&area)); + REPORTER_ASSERT(r, area == 400); +} -- cgit v1.2.3