Chromium Code Reviews| Index: tests/PixelRefTest.cpp |
| diff --git a/tests/PixelRefTest.cpp b/tests/PixelRefTest.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..9c167c776408b97789c2d04a5aaadfa51a87cead |
| --- /dev/null |
| +++ b/tests/PixelRefTest.cpp |
| @@ -0,0 +1,49 @@ |
| +#include "Test.h" |
| +#include "TestClassDef.h" |
| + |
| +#include "SkPixelRef.h" |
| +#include "SkMallocPixelRef.h" |
| + |
| +namespace { |
| + |
| +class TestListener : public SkPixelRef::InvalidationListener { |
| +public: |
| + explicit TestListener(int* ptr) : fPtr(ptr) {} |
| + void onInvalidate() SK_OVERRIDE { (*fPtr)++; } |
| +private: |
| + int* fPtr; |
| +}; |
| + |
| +} // namespace |
| + |
| +DEF_TEST(PixelRef_Invalidation, r) { |
| + SkMallocPixelRef pixelRef(NULL, 0, NULL); // We don't really care about the pixels here. |
| + |
| + // Register a listener. |
| + int count = 0; |
| + pixelRef.addInvalidationListener(SkNEW_ARGS(TestListener, (&count))); |
| + REPORTER_ASSERT(r, 0 == count); |
| + |
| + // No one has looked at our pixelRef's generation ID, so invalidating it doesn't make sense. |
| + // (An SkPixelRef tree falls in the forest but there's nobody around to hear it. Do we care?) |
| + pixelRef.notifyPixelsChanged(); |
| + REPORTER_ASSERT(r, 0 == count); |
| + |
| + // Force the generation ID to be calculated. |
| + REPORTER_ASSERT(r, 0 != pixelRef.getGenerationID()); |
| + |
| + // Our listener was dropped in the first call to notifyPixelsChanged(). This is a no-op. |
| + pixelRef.notifyPixelsChanged(); |
| + REPORTER_ASSERT(r, 0 == count); |
| + |
| + // Force the generation ID to be recalculated, then add a listener. |
| + REPORTER_ASSERT(r, 0 != pixelRef.getGenerationID()); |
| + pixelRef.addInvalidationListener(SkNEW_ARGS(TestListener, (&count))); |
| + pixelRef.notifyPixelsChanged(); |
| + REPORTER_ASSERT(r, 1 == count); |
| + |
| + // Quick check that NULL is safe. |
|
scroggo
2013/10/22 21:04:02
Is the goal here to test that we don't crash? Can
bsalomon
2013/10/23 13:52:57
¿If there was a bug it could crash in release, no?
mtklein
2013/10/23 15:28:10
Right. This is relevant in both Release and Debug
|
| + REPORTER_ASSERT(r, 0 != pixelRef.getGenerationID()); |
| + pixelRef.addInvalidationListener(NULL); |
| + pixelRef.notifyPixelsChanged(); |
| +} |