Make Java TextFormat.printToUnicodeString() escape newlines.

Fix issue #77
diff --git a/java/src/main/java/com/google/protobuf/TextFormat.java b/java/src/main/java/com/google/protobuf/TextFormat.java
index 63e62fc..4f6756e 100644
--- a/java/src/main/java/com/google/protobuf/TextFormat.java
+++ b/java/src/main/java/com/google/protobuf/TextFormat.java
@@ -411,7 +411,8 @@
           generator.print("\"");
           generator.print(escapeNonAscii ?
               escapeText((String) value) :
-              escapeDoubleQuotesAndBackslashes((String) value));
+              escapeDoubleQuotesAndBackslashes((String) value)
+                  .replace("\n", "\\n"));
           generator.print("\"");
           break;
 
diff --git a/java/src/test/java/com/google/protobuf/TextFormatTest.java b/java/src/test/java/com/google/protobuf/TextFormatTest.java
index 82f9582..eba06ca 100644
--- a/java/src/test/java/com/google/protobuf/TextFormatTest.java
+++ b/java/src/test/java/com/google/protobuf/TextFormatTest.java
@@ -864,15 +864,15 @@
     assertEquals(message.getOptionalString(), builder.getOptionalString());
   }
   
-  public void testPrintToUnicodeStringWithNewlines() {
+  public void testPrintToUnicodeStringWithNewlines() throws Exception {
     // No newlines at start and end
-    assertEquals("optional_string: \"test newlines\n\nin\nstring\"\n",
+    assertEquals("optional_string: \"test newlines\\n\\nin\\nstring\"\n",
         TextFormat.printToUnicodeString(TestAllTypes.newBuilder()
             .setOptionalString("test newlines\n\nin\nstring")
             .build()));
 
     // Newlines at start and end
-    assertEquals("optional_string: \"\ntest\nnewlines\n\nin\nstring\n\"\n",
+    assertEquals("optional_string: \"\\ntest\\nnewlines\\n\\nin\\nstring\\n\"\n",
         TextFormat.printToUnicodeString(TestAllTypes.newBuilder()
             .setOptionalString("\ntest\nnewlines\n\nin\nstring\n")
             .build()));
@@ -882,14 +882,22 @@
         TextFormat.printToUnicodeString(TestAllTypes.newBuilder()
             .setOptionalString("")
             .build()));
-    assertEquals("optional_string: \"\n\"\n",
+    assertEquals("optional_string: \"\\n\"\n",
         TextFormat.printToUnicodeString(TestAllTypes.newBuilder()
             .setOptionalString("\n")
             .build()));
-    assertEquals("optional_string: \"\n\n\"\n",
+    assertEquals("optional_string: \"\\n\\n\"\n",
         TextFormat.printToUnicodeString(TestAllTypes.newBuilder()
             .setOptionalString("\n\n")
             .build()));
+
+    // Test escaping roundtrip
+    TestAllTypes message = TestAllTypes.newBuilder()
+        .setOptionalString("\ntest\nnewlines\n\nin\nstring\n")
+        .build();
+    TestAllTypes.Builder builder = TestAllTypes.newBuilder();
+    TextFormat.merge(TextFormat.printToUnicodeString(message), builder);
+    assertEquals(message.getOptionalString(), builder.getOptionalString());
   }
 
   public void testPrintToUnicodeString_unknown() {