/*
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.http.converter.json;
import java.util.Calendar;
import java.util.Date;
import com.google.gson.Gson;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* {@link GsonFactoryBean} tests.
*
* @author Roy Clarkson
*/
public class GsonFactoryBeanTests {
private static final String DATE_FORMAT = "yyyy-MM-dd";
private GsonFactoryBean factory = new GsonFactoryBean();
@Test
public void serializeNulls() throws Exception {
this.factory.setSerializeNulls(true);
this.factory.afterPropertiesSet();
Gson gson = this.factory.getObject();
StringBean bean = new StringBean();
String result = gson.toJson(bean);
assertEquals("{\"name\":null}", result);
}
@Test
public void serializeNullsFalse() throws Exception {
this.factory.setSerializeNulls(false);
this.factory.afterPropertiesSet();
Gson gson = this.factory.getObject();
StringBean bean = new StringBean();
String result = gson.toJson(bean);
assertEquals("{}", result);
}
@Test
public void prettyPrinting() throws Exception {
this.factory.setPrettyPrinting(true);
this.factory.afterPropertiesSet();
Gson gson = this.factory.getObject();
StringBean bean = new StringBean();
bean.setName("Jason");
String result = gson.toJson(bean);
assertTrue(result.contains(" \"name\": \"Jason\""));
}
@Test
public void prettyPrintingFalse() throws Exception {
this.factory.setPrettyPrinting(false);
this.factory.afterPropertiesSet();
Gson gson = this.factory.getObject();
StringBean bean = new StringBean();
bean.setName("Jason");
String result = gson.toJson(bean);
assertEquals("{\"name\":\"Jason\"}", result);
}
@Test
public void disableHtmlEscaping() throws Exception {
this.factory.setDisableHtmlEscaping(true);
this.factory.afterPropertiesSet();
Gson gson = this.factory.getObject();
StringBean bean = new StringBean();
bean.setName("Bob=Bob");
String result = gson.toJson(bean);
assertEquals("{\"name\":\"Bob=Bob\"}", result);
}
@Test
public void disableHtmlEscapingFalse() throws Exception {
this.factory.setDisableHtmlEscaping(false);
this.factory.afterPropertiesSet();
Gson gson = this.factory.getObject();
StringBean bean = new StringBean();
bean.setName("Bob=Bob");
String result = gson.toJson(bean);
assertEquals("{\"name\":\"Bob\\u003dBob\"}", result);
}
@Test
public void customizeDateFormatPattern() throws Exception {
this.factory.setDateFormatPattern(DATE_FORMAT);
this.factory.afterPropertiesSet();
Gson gson = this.factory.getObject();
DateBean bean = new DateBean();
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR, 2014);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DATE, 1);
Date date = cal.getTime();
bean.setDate(date);
String result = gson.toJson(bean);
assertEquals("{\"date\":\"2014-01-01\"}", result);
}
@Test
public void customizeDateFormatNone() throws Exception {
this.factory.afterPropertiesSet();
Gson gson = this.factory.getObject();
DateBean bean = new DateBean();
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR, 2014);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DATE, 1);
Date date = cal.getTime();
bean.setDate(date);
String result = gson.toJson(bean);
assertTrue(result.startsWith("{\"date\":\"Jan 1, 2014"));
assertTrue(result.endsWith("12:00:00 AM\"}"));
}
@Test
public void base64EncodeByteArrays() throws Exception {
this.factory.setBase64EncodeByteArrays(true);
this.factory.afterPropertiesSet();
Gson gson = this.factory.getObject();
ByteArrayBean bean = new ByteArrayBean();
bean.setBytes(new byte[] {0x1, 0x2});
String result = gson.toJson(bean);
assertEquals("{\"bytes\":\"AQI\\u003d\"}", result);
}
@Test
public void base64EncodeByteArraysDisableHtmlEscaping() throws Exception {
this.factory.setBase64EncodeByteArrays(true);
this.factory.setDisableHtmlEscaping(true);
this.factory.afterPropertiesSet();
Gson gson = this.factory.getObject();
ByteArrayBean bean = new ByteArrayBean();
bean.setBytes(new byte[] {0x1, 0x2});
String result = gson.toJson(bean);
assertEquals("{\"bytes\":\"AQI=\"}", result);
}
@Test
public void base64EncodeByteArraysFalse() throws Exception {
this.factory.setBase64EncodeByteArrays(false);
this.factory.afterPropertiesSet();
Gson gson = this.factory.getObject();
ByteArrayBean bean = new ByteArrayBean();
bean.setBytes(new byte[] {0x1, 0x2});
String result = gson.toJson(bean);
assertEquals("{\"bytes\":[1,2]}", result);
}
private static class StringBean {
private String name;
@SuppressWarnings("unused")
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
private static class DateBean {
private Date date;
@SuppressWarnings("unused")
public Date getDate() {
return this.date;
}
public void setDate(Date date) {
this.date = date;
}
}
private static class ByteArrayBean {
private byte[] bytes;
@SuppressWarnings("unused")
public byte[] getBytes() {
return this.bytes;
}
public void setBytes(byte[] bytes) {
this.bytes = bytes;
}
}
}