Index: tests/PathTest.cpp |
diff --git a/tests/PathTest.cpp b/tests/PathTest.cpp |
index 8272692167d5de54ee35f00b759c0389485cb2a6..b0bd66726d4eb719a7361970743c8bc1f3992556 100644 |
--- a/tests/PathTest.cpp |
+++ b/tests/PathTest.cpp |
@@ -3715,6 +3715,21 @@ static void test_dump(skiatest::Reporter* reporter) { |
"path.lineTo(3, 4);\n"); |
} |
+namespace { |
+ |
+class ChangeListener : public SkPathRef::GenIDChangeListener { |
+public: |
+ ChangeListener(bool *changed) : fChanged(changed) { *fChanged = false; } |
+ virtual ~ChangeListener() {} |
+ void onChange() override { |
+ *fChanged = true; |
+ } |
+private: |
+ bool* fChanged; |
+}; |
+ |
+} |
+ |
class PathTest_Private { |
public: |
static void TestPathTo(skiatest::Reporter* reporter) { |
@@ -3734,6 +3749,50 @@ public: |
SkRect reverseExpected = {-4, -4, 8, 8}; |
REPORTER_ASSERT(reporter, p.getBounds() == reverseExpected); |
} |
+ |
+ static void TestPathrefListeners(skiatest::Reporter* reporter) { |
+ SkPath p; |
+ |
+ bool changed = false; |
+ p.moveTo(0, 0); |
+ |
+ // Check that listener is notified on moveTo(). |
+ |
+ SkPathPriv::AddGenIDChangeListener(p, SkNEW(ChangeListener(&changed))); |
+ REPORTER_ASSERT(reporter, !changed); |
+ p.moveTo(10, 0); |
+ REPORTER_ASSERT(reporter, changed); |
+ |
+ // Check that listener is notified on lineTo(). |
+ SkPathPriv::AddGenIDChangeListener(p, SkNEW(ChangeListener(&changed))); |
+ REPORTER_ASSERT(reporter, !changed); |
+ p.lineTo(20, 0); |
+ REPORTER_ASSERT(reporter, changed); |
+ |
+ // Check that listener is notified on reset(). |
+ SkPathPriv::AddGenIDChangeListener(p, SkNEW(ChangeListener(&changed))); |
+ REPORTER_ASSERT(reporter, !changed); |
+ p.reset(); |
+ REPORTER_ASSERT(reporter, changed); |
+ |
+ p.moveTo(0, 0); |
+ |
+ // Check that listener is notified on rewind(). |
+ SkPathPriv::AddGenIDChangeListener(p, SkNEW(ChangeListener(&changed))); |
+ REPORTER_ASSERT(reporter, !changed); |
+ p.rewind(); |
+ REPORTER_ASSERT(reporter, changed); |
+ |
+ // Check that listener is notified when pathref is deleted. |
+ { |
+ SkPath q; |
+ q.moveTo(10, 10); |
+ SkPathPriv::AddGenIDChangeListener(q, SkNEW(ChangeListener(&changed))); |
+ REPORTER_ASSERT(reporter, !changed); |
+ } |
+ // q went out of scope. |
+ REPORTER_ASSERT(reporter, changed); |
+ } |
}; |
DEF_TEST(Paths, reporter) { |
@@ -3880,6 +3939,7 @@ DEF_TEST(Paths, reporter) { |
test_contains(reporter); |
PathTest_Private::TestPathTo(reporter); |
PathRefTest_Private::TestPathRef(reporter); |
+ PathTest_Private::TestPathrefListeners(reporter); |
test_dump(reporter); |
test_path_crbug389050(reporter); |
test_path_crbugskia2820(reporter); |