|  | @@ -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
 |