Index: tests/Writer32Test.cpp |
diff --git a/tests/Writer32Test.cpp b/tests/Writer32Test.cpp |
index a471099b38ac4f73e5697a1525dfa59b04a9dbd0..f9b6f6a03fc16e8f575a1eebb69b1032eeb4598b 100644 |
--- a/tests/Writer32Test.cpp |
+++ b/tests/Writer32Test.cpp |
@@ -280,3 +280,36 @@ DEF_TEST(Writer32_misc, reporter) { |
test_ptr(reporter); |
test_rewind(reporter); |
} |
+ |
+DEF_TEST(Writer32_snapshot, reporter) { |
+ int32_t array[] = { 1, 2, 4, 11 }; |
+ SkSWriter32<sizeof(array) + 4> writer; |
+ writer.write(array, sizeof(array)); |
+ check_contents(reporter, writer, array, sizeof(array)); |
+ const void* beforeData = writer.contiguousArray(); |
+ SkAutoDataUnref snapshot(writer.snapshotAsData()); |
+ // check the snapshot forced a copy of the static data |
+ REPORTER_ASSERT(reporter, snapshot->data() != beforeData); |
+ REPORTER_ASSERT(reporter, snapshot->size() == writer.bytesWritten()); |
+} |
+ |
+DEF_TEST(Writer32_snapshot_dynamic, reporter) { |
+ int32_t array[] = { 1, 2, 4, 11 }; |
+ SkWriter32 writer; |
+ writer.write(array, sizeof(array)); |
+ check_contents(reporter, writer, array, sizeof(array)); |
+ // force a capacity increase so we can test COW behaviour |
+ writer.write(array, sizeof(array)); |
+ writer.rewindToOffset(sizeof(array)); |
+ const void* beforeData = writer.contiguousArray(); |
+ SkAutoDataUnref snapshot(writer.snapshotAsData()); |
+ // check the snapshot still points to the same data as the writer |
+ REPORTER_ASSERT(reporter, writer.contiguousArray() == beforeData); |
+ REPORTER_ASSERT(reporter, snapshot->data() == beforeData); |
+ REPORTER_ASSERT(reporter, snapshot->size() == writer.bytesWritten()); |
+ // write more data that would fit in the buffer |
+ writer.write(array, sizeof(array)); |
+ // test it triggered COW anyway |
+ REPORTER_ASSERT(reporter, writer.contiguousArray() != beforeData); |
+} |
+ |