GsonFactoryBeanTests.java 5.7 KB
Newer Older
R
Roy Clarkson 已提交
1
/*
S
Sam Brannen 已提交
2
 * Copyright 2002-2015 the original author or authors.
R
Roy Clarkson 已提交
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
 *
 * 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;
S
Sam Brannen 已提交
23

24
import org.junit.Test;
R
Roy Clarkson 已提交
25 26 27 28

import static org.junit.Assert.*;

/**
R
Polish  
Rossen Stoyanchev 已提交
29
 * {@link GsonFactoryBean} tests.
R
Roy Clarkson 已提交
30 31 32 33 34 35 36
 *
 * @author Roy Clarkson
 */
public class GsonFactoryBeanTests {

	private static final String DATE_FORMAT = "yyyy-MM-dd";

37
	private GsonFactoryBean factory = new GsonFactoryBean();
R
Roy Clarkson 已提交
38 39 40


	@Test
41 42
	public void serializeNulls() throws Exception {
		this.factory.setSerializeNulls(true);
R
Roy Clarkson 已提交
43 44 45 46
		this.factory.afterPropertiesSet();
		Gson gson = this.factory.getObject();
		StringBean bean = new StringBean();
		String result = gson.toJson(bean);
47
		assertEquals("{\"name\":null}", result);
R
Roy Clarkson 已提交
48 49 50
	}

	@Test
51 52
	public void serializeNullsFalse() throws Exception {
		this.factory.setSerializeNulls(false);
R
Roy Clarkson 已提交
53 54 55 56
		this.factory.afterPropertiesSet();
		Gson gson = this.factory.getObject();
		StringBean bean = new StringBean();
		String result = gson.toJson(bean);
57
		assertEquals("{}", result);
R
Roy Clarkson 已提交
58 59 60
	}

	@Test
61 62
	public void prettyPrinting() throws Exception {
		this.factory.setPrettyPrinting(true);
R
Roy Clarkson 已提交
63 64 65
		this.factory.afterPropertiesSet();
		Gson gson = this.factory.getObject();
		StringBean bean = new StringBean();
66
		bean.setName("Jason");
R
Roy Clarkson 已提交
67
		String result = gson.toJson(bean);
68
		assertTrue(result.contains("  \"name\": \"Jason\""));
R
Roy Clarkson 已提交
69 70 71
	}

	@Test
72 73
	public void prettyPrintingFalse() throws Exception {
		this.factory.setPrettyPrinting(false);
R
Roy Clarkson 已提交
74 75 76
		this.factory.afterPropertiesSet();
		Gson gson = this.factory.getObject();
		StringBean bean = new StringBean();
77
		bean.setName("Jason");
R
Roy Clarkson 已提交
78
		String result = gson.toJson(bean);
79
		assertEquals("{\"name\":\"Jason\"}", result);
R
Roy Clarkson 已提交
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
	}

	@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
105 106
	public void customizeDateFormatPattern() throws Exception {
		this.factory.setDateFormatPattern(DATE_FORMAT);
R
Roy Clarkson 已提交
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
		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);
134 135
		assertTrue(result.startsWith("{\"date\":\"Jan 1, 2014"));
		assertTrue(result.endsWith("12:00:00 AM\"}"));
R
Roy Clarkson 已提交
136 137 138 139 140 141 142 143
	}

	@Test
	public void base64EncodeByteArrays() throws Exception {
		this.factory.setBase64EncodeByteArrays(true);
		this.factory.afterPropertiesSet();
		Gson gson = this.factory.getObject();
		ByteArrayBean bean = new ByteArrayBean();
144
		bean.setBytes(new byte[] {0x1, 0x2});
R
Roy Clarkson 已提交
145 146 147 148 149 150 151 152 153 154 155
		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();
156
		bean.setBytes(new byte[] {0x1, 0x2});
R
Roy Clarkson 已提交
157 158 159 160 161 162 163 164 165 166
		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();
167
		bean.setBytes(new byte[] {0x1, 0x2});
R
Roy Clarkson 已提交
168 169 170 171 172 173 174 175 176
		String result = gson.toJson(bean);
		assertEquals("{\"bytes\":[1,2]}", result);
	}


	private static class StringBean {

		private String name;

S
Sam Brannen 已提交
177
		@SuppressWarnings("unused")
R
Roy Clarkson 已提交
178 179 180 181 182 183 184 185 186
		public String getName() {
			return this.name;
		}

		public void setName(String name) {
			this.name = name;
		}
	}

187

R
Roy Clarkson 已提交
188 189 190 191
	private static class DateBean {

		private Date date;

S
Sam Brannen 已提交
192
		@SuppressWarnings("unused")
R
Roy Clarkson 已提交
193 194 195 196 197 198 199 200 201
		public Date getDate() {
			return this.date;
		}

		public void setDate(Date date) {
			this.date = date;
		}
	}

202 203

	private static class ByteArrayBean {
R
Roy Clarkson 已提交
204 205 206

		private byte[] bytes;

S
Sam Brannen 已提交
207
		@SuppressWarnings("unused")
R
Roy Clarkson 已提交
208 209 210 211 212 213 214 215 216 217
		public byte[] getBytes() {
			return this.bytes;
		}

		public void setBytes(byte[] bytes) {
			this.bytes = bytes;
		}
	}

}