Index: tests/PixelRefTest.cpp |
diff --git a/tests/PixelRefTest.cpp b/tests/PixelRefTest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ce2575e830ceaa36963c802282dea797f46bde30 |
--- /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::GenIDChangeListener { |
+public: |
+ explicit TestListener(int* ptr) : fPtr(ptr) {} |
+ void onChange() SK_OVERRIDE { (*fPtr)++; } |
+private: |
+ int* fPtr; |
+}; |
+ |
+} // namespace |
+ |
+DEF_TEST(PixelRef_GenIDChange, r) { |
+ SkMallocPixelRef pixelRef(NULL, 0, NULL); // We don't really care about the pixels here. |
+ |
+ // Register a listener. |
+ int count = 0; |
+ pixelRef.addGenIDChangeListener(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.addGenIDChangeListener(SkNEW_ARGS(TestListener, (&count))); |
+ pixelRef.notifyPixelsChanged(); |
+ REPORTER_ASSERT(r, 1 == count); |
+ |
+ // Quick check that NULL is safe. |
+ REPORTER_ASSERT(r, 0 != pixelRef.getGenerationID()); |
+ pixelRef.addGenIDChangeListener(NULL); |
+ pixelRef.notifyPixelsChanged(); |
+} |