Update how SkPath handles fGenerationID and fSourcePath, and add tests to cover.

BUG=
R=bungeman@google.com, reed@google.com

Review URL: https://codereview.chromium.org/22911002

git-svn-id: http://skia.googlecode.com/svn/trunk@10756 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tests/PathTest.cpp b/tests/PathTest.cpp
index 4637e92..e6795d6 100644
--- a/tests/PathTest.cpp
+++ b/tests/PathTest.cpp
@@ -84,18 +84,50 @@
 
 static void test_android_specific_behavior(skiatest::Reporter* reporter) {
 #ifdef SK_BUILD_FOR_ANDROID
-    // Copy constructor should preserve generation ID, but assignment shouldn't.
-    SkPath original;
+    // Make sure we treat fGenerationID and fSourcePath correctly for each of
+    // copy, assign, rewind, reset, and swap.
+    SkPath original, source, anotherSource;
+    original.setSourcePath(&source);
     original.moveTo(0, 0);
     original.lineTo(1, 1);
     REPORTER_ASSERT(reporter, original.getGenerationID() > 0);
+    REPORTER_ASSERT(reporter, original.getSourcePath() == &source);
 
-    const SkPath copy(original);
+    uint32_t copyID, assignID;
+
+    // Test copy constructor.  Copy generation ID, copy source path.
+    SkPath copy(original);
     REPORTER_ASSERT(reporter, copy.getGenerationID() == original.getGenerationID());
+    REPORTER_ASSERT(reporter, copy.getSourcePath() == original.getSourcePath());
 
+    // Test assigment operator.  Increment generation ID, copy source path.
     SkPath assign;
+    assignID = assign.getGenerationID();
     assign = original;
-    REPORTER_ASSERT(reporter, assign.getGenerationID() != original.getGenerationID());
+    REPORTER_ASSERT(reporter, assign.getGenerationID() > assignID);
+    REPORTER_ASSERT(reporter, assign.getSourcePath() == original.getSourcePath());
+
+    // Test rewind.  Increment generation ID, don't touch source path.
+    copyID = copy.getGenerationID();
+    copy.rewind();
+    REPORTER_ASSERT(reporter, copy.getGenerationID() > copyID);
+    REPORTER_ASSERT(reporter, copy.getSourcePath() == original.getSourcePath());
+
+    // Test reset.  Increment generation ID, don't touch source path.
+    assignID = assign.getGenerationID();
+    assign.reset();
+    REPORTER_ASSERT(reporter, assign.getGenerationID() > assignID);
+    REPORTER_ASSERT(reporter, assign.getSourcePath() == original.getSourcePath());
+
+    // Test swap.  Increment both generation IDs, swap source paths.
+    copy.setSourcePath(&anotherSource);
+    copyID = copy.getGenerationID();
+    assignID = assign.getGenerationID();
+    copy.swap(assign);
+    REPORTER_ASSERT(reporter, copy.getGenerationID() > copyID);
+    REPORTER_ASSERT(reporter, assign.getGenerationID() > assignID);
+    REPORTER_ASSERT(reporter, copy.getSourcePath() == original.getSourcePath());
+    REPORTER_ASSERT(reporter, assign.getSourcePath() == &anotherSource);
 #endif
 }