| 
					
				 | 
			
			
				@@ -49,10 +49,12 @@ class JsonObjectWriterTest : public ::testing::Test { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         out_stream_(new CodedOutputStream(str_stream_)), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ow_(nullptr) {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  virtual ~JsonObjectWriterTest() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    delete ow_; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ~JsonObjectWriterTest() override { delete ow_; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  std::string CloseStreamAndGetString() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     delete out_stream_; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     delete str_stream_; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return output_; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   std::string output_; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -64,7 +66,7 @@ class JsonObjectWriterTest : public ::testing::Test { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, EmptyRootObject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ow_ = new JsonObjectWriter("", out_stream_); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ow_->StartObject("")->EndObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  EXPECT_EQ("{}", output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_EQ("{}", CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, EmptyObject) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -74,14 +76,13 @@ TEST_F(JsonObjectWriterTest, EmptyObject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->StartObject("empty") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->EndObject() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->EndObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  EXPECT_EQ("{\"test\":\"value\",\"empty\":{}}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_EQ("{\"test\":\"value\",\"empty\":{}}", CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, EmptyRootList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ow_ = new JsonObjectWriter("", out_stream_); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ow_->StartList("")->EndList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  EXPECT_EQ("[]", output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_EQ("[]", CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, EmptyList) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -91,14 +92,13 @@ TEST_F(JsonObjectWriterTest, EmptyList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->StartList("empty") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->EndList() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->EndObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  EXPECT_EQ("{\"test\":\"value\",\"empty\":[]}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_EQ("{\"test\":\"value\",\"empty\":[]}", CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, EmptyObjectKey) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ow_ = new JsonObjectWriter("", out_stream_); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ow_->StartObject("")->RenderString("", "value")->EndObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  EXPECT_EQ("{\"\":\"value\"}", output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_EQ("{\"\":\"value\"}", CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, ObjectInObject) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -108,8 +108,7 @@ TEST_F(JsonObjectWriterTest, ObjectInObject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->RenderString("field", "value") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->EndObject() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->EndObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  EXPECT_EQ("{\"nested\":{\"field\":\"value\"}}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_EQ("{\"nested\":{\"field\":\"value\"}}", CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, ListInObject) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -119,8 +118,7 @@ TEST_F(JsonObjectWriterTest, ListInObject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->RenderString("", "value") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->EndList() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->EndObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  EXPECT_EQ("{\"nested\":[\"value\"]}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_EQ("{\"nested\":[\"value\"]}", CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, ObjectInList) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -130,8 +128,7 @@ TEST_F(JsonObjectWriterTest, ObjectInList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->RenderString("field", "value") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->EndObject() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->EndList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  EXPECT_EQ("[{\"field\":\"value\"}]", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_EQ("[{\"field\":\"value\"}]", CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, ListInList) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -141,7 +138,7 @@ TEST_F(JsonObjectWriterTest, ListInList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->RenderString("", "value") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->EndList() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->EndList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  EXPECT_EQ("[[\"value\"]]", output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_EQ("[[\"value\"]]", CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, RenderPrimitives) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -171,7 +168,7 @@ TEST_F(JsonObjectWriterTest, RenderPrimitives) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           "\"string\":\"string\"," 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           "\"emptybytes\":\"\"," 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           "\"emptystring\":\"\"}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, BytesEncodesAsNonWebSafeBase64) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -181,8 +178,7 @@ TEST_F(JsonObjectWriterTest, BytesEncodesAsNonWebSafeBase64) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ow_ = new JsonObjectWriter("", out_stream_); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ow_->StartObject("")->RenderBytes("bytes", s)->EndObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Non-web-safe would encode this as "/+8=" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  EXPECT_EQ("{\"bytes\":\"/+8=\"}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_EQ("{\"bytes\":\"/+8=\"}", CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, PrettyPrintList) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -205,7 +201,7 @@ TEST_F(JsonObjectWriterTest, PrettyPrintList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       " ],\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       " \"empty\": []\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "}\n", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, PrettyPrintObject) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -228,7 +224,7 @@ TEST_F(JsonObjectWriterTest, PrettyPrintObject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       " },\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       " \"empty\": {}\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "}\n", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, PrettyPrintEmptyObjectInEmptyList) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -245,7 +241,7 @@ TEST_F(JsonObjectWriterTest, PrettyPrintEmptyObjectInEmptyList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "  {}\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       " ]\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "}\n", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, PrettyPrintDoubleIndent) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -259,14 +255,14 @@ TEST_F(JsonObjectWriterTest, PrettyPrintDoubleIndent) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "  \"bool\": true,\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "  \"int\": 42\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "}\n", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, StringsEscapedAndEnclosedInDoubleQuotes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ow_ = new JsonObjectWriter("", out_stream_); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ow_->StartObject("")->RenderString("string", "'<>&\\\"\r\n")->EndObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_EQ("{\"string\":\"'\\u003c\\u003e&\\\\\\\"\\r\\n\"}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, Stringification) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -286,7 +282,7 @@ TEST_F(JsonObjectWriterTest, Stringification) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "\"float_pos\":\"Infinity\"," 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "\"double_neg\":\"-Infinity\"," 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "\"float_neg\":\"-Infinity\"}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, TestRegularByteEncoding) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -297,8 +293,7 @@ TEST_F(JsonObjectWriterTest, TestRegularByteEncoding) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Test that we get regular (non websafe) base64 encoding on byte fields by 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // default. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  EXPECT_EQ("{\"bytes\":\"A+/A\"}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_EQ("{\"bytes\":\"A+/A\"}", CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TEST_F(JsonObjectWriterTest, TestWebsafeByteEncoding) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -309,8 +304,7 @@ TEST_F(JsonObjectWriterTest, TestWebsafeByteEncoding) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ->EndObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Test that we get websafe base64 encoding when explicitly asked. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  EXPECT_EQ("{\"bytes\":\"A-_AEA==\"}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            output_.substr(0, out_stream_->ByteCount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_EQ("{\"bytes\":\"A-_AEA==\"}", CloseStreamAndGetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }  // namespace converter 
			 |