allow NULL in writeString/readString

BUG=skia:1469, code.google.com/p/android/issues/detail?id=58257
R=scroggo@google.com

Author: mtklein@google.com

Review URL: https://chromiumcodereview.appspot.com/22359003

git-svn-id: http://skia.googlecode.com/svn/trunk@10662 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tests/Writer32Test.cpp b/tests/Writer32Test.cpp
index e5b9363..6ecfcf3 100644
--- a/tests/Writer32Test.cpp
+++ b/tests/Writer32Test.cpp
@@ -21,6 +21,34 @@
     REPORTER_ASSERT(reporter, !memcmp(storage.get(), expected, size));
 }
 
+static void test_string_null(skiatest::Reporter* reporter) {
+    uint8_t storage[8];
+    SkWriter32 writer(0, storage, sizeof(storage));
+    SkReader32 reader(storage, sizeof(storage));
+
+    const char* str;
+    size_t len;
+
+    // Can we write NULL?
+    writer.writeString(NULL);
+    const int32_t null[] = { 0xFFFF };
+    check_contents(reporter, writer, null, sizeof(null));
+    str = reader.readString(&len);
+    REPORTER_ASSERT(reporter, NULL == str);
+    REPORTER_ASSERT(reporter, 0 == len);
+
+    writer.reset(storage, sizeof(storage));
+    reader.rewind();
+
+    // Is NULL distinct from ""?
+    writer.writeString("");
+    const int32_t empty[] = { 0x0, 0x0 };
+    check_contents(reporter, writer, empty, sizeof(empty));
+    str = reader.readString(&len);
+    REPORTER_ASSERT(reporter, 0 == strcmp("", str));
+    REPORTER_ASSERT(reporter, 0 == len);
+}
+
 static void test_rewind(skiatest::Reporter* reporter) {
     SkSWriter32<32> writer(32);
     int32_t array[3] = { 1, 2, 4 };
@@ -228,6 +256,7 @@
         testWritePad(reporter, &writer);
     }
 
+    test_string_null(reporter);
     test_ptr(reporter);
     test_rewind(reporter);
 }