package org.codehaus.jackson.map; | |
import static org.codehaus.jackson.map.PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES; | |
import java.util.Arrays; | |
import java.util.List; | |
import org.codehaus.jackson.annotate.JsonPropertyOrder; | |
import org.codehaus.jackson.map.TestNamingStrategy.PersonBean; | |
import org.junit.Test; | |
/** | |
* Unit tests to verify functioning of | |
* {@link PropertyNamingStrategy#CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES} | |
* inside the context of an ObjectMapper. | |
* CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES was added in Jackson 1.9, | |
* as per [JACKSON-598]. | |
* | |
* @since 1.9 | |
*/ | |
public class TestStdNamingStrategies extends BaseMapTest | |
{ | |
/* | |
/********************************************************** | |
/* Helper types | |
/********************************************************** | |
*/ | |
@JsonPropertyOrder({"www", "some_url", "some_uris"}) | |
static class Acronyms | |
{ | |
public String WWW; | |
public String someURL; | |
public String someURIs; | |
public Acronyms() {this(null, null, null);} | |
public Acronyms(String WWW, String someURL, String someURIs) | |
{ | |
this.WWW = WWW; | |
this.someURL = someURL; | |
this.someURIs = someURIs; | |
} | |
} | |
@JsonPropertyOrder({"from_user", "user", "from$user", "from7user", "_"}) | |
static class UnchangedNames | |
{ | |
public String from_user; | |
public String _user; | |
public String from$user; | |
public String from7user; | |
public String _; | |
public UnchangedNames() {this(null, null, null, null, null);} | |
public UnchangedNames(String from_user, String _user, String from$user, String from7user, String _) | |
{ | |
this.from_user = from_user; | |
this._user = _user; | |
this.from$user = from$user; | |
this.from7user = from7user; | |
this._ = _; | |
} | |
} | |
@JsonPropertyOrder({"results", "user", "__", "$_user"}) | |
static class OtherNonStandardNames | |
{ | |
public String Results; | |
public String _User; | |
public String ___; | |
public String $User; | |
public OtherNonStandardNames() {this(null, null, null, null);} | |
public OtherNonStandardNames(String Results, String _User, String ___, String $User) | |
{ | |
this.Results = Results; | |
this._User = _User; | |
this.___ = ___; | |
this.$User = $User; | |
} | |
} | |
/* | |
/********************************************************** | |
/* Set up | |
/********************************************************** | |
*/ | |
public static List<Object[]> NAME_TRANSLATIONS = Arrays.asList(new Object[][] { | |
{null, null}, | |
{"", ""}, | |
{"a", "a"}, | |
{"abc", "abc"}, | |
{"1", "1"}, | |
{"123", "123"}, | |
{"1a", "1a"}, | |
{"a1", "a1"}, | |
{"$", "$"}, | |
{"$a", "$a"}, | |
{"a$", "a$"}, | |
{"$_a", "$_a"}, | |
{"a_$", "a_$"}, | |
{"a$a", "a$a"}, | |
{"$A", "$_a"}, | |
{"$_A", "$_a"}, | |
{"_", "_"}, | |
{"__", "_"}, | |
{"___", "__"}, | |
{"A", "a"}, | |
{"A1", "a1"}, | |
{"1A", "1_a"}, | |
{"_a", "a"}, | |
{"_A", "a"}, | |
{"a_a", "a_a"}, | |
{"a_A", "a_a"}, | |
{"A_A", "a_a"}, | |
{"A_a", "a_a"}, | |
{"WWW", "www"}, | |
{"someURI", "some_uri"}, | |
{"someURIs", "some_uris"}, | |
{"Results", "results"}, | |
{"_Results", "results"}, | |
{"_results", "results"}, | |
{"__results", "_results"}, | |
{"__Results", "_results"}, | |
{"___results", "__results"}, | |
{"___Results", "__results"}, | |
{"userName", "user_name"}, | |
{"user_name", "user_name"}, | |
{"user__name", "user__name"}, | |
{"UserName", "user_name"}, | |
{"User_Name", "user_name"}, | |
{"User__Name", "user__name"}, | |
{"_user_name", "user_name"}, | |
{"_UserName", "user_name"}, | |
{"_User_Name", "user_name"}, | |
{"UGLY_NAME", "ugly_name"}, | |
{"_Bars", "bars" } | |
}); | |
private ObjectMapper mapper; | |
@Override | |
public void setUp() throws Exception | |
{ | |
super.setUp(); | |
mapper = new ObjectMapper(); | |
mapper.setPropertyNamingStrategy(CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES); | |
} | |
/* | |
/********************************************************** | |
/* Test methods for CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES | |
/********************************************************** | |
*/ | |
/** | |
* Unit test to verify translations of | |
* {@link PropertyNamingStrategy#CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES} | |
* outside the context of an ObjectMapper. | |
* CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES was added in Jackson 1.9, | |
* as per [JACKSON-598]. | |
*/ | |
@Test | |
public void testLowerCaseStrategyStandAlone() | |
{ | |
for (Object[] pair : NAME_TRANSLATIONS) { | |
String translatedJavaName = PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES.nameForField(null, null, | |
(String) pair[0]); | |
assertEquals((String) pair[1], translatedJavaName); | |
} | |
} | |
public void testLowerCaseTranslations() throws Exception | |
{ | |
// First serialize | |
String json = mapper.writeValueAsString(new PersonBean("Joe", "Sixpack", 42)); | |
assertEquals("{\"first_name\":\"Joe\",\"last_name\":\"Sixpack\",\"age\":42}", json); | |
// then deserialize | |
PersonBean result = mapper.readValue(json, PersonBean.class); | |
assertEquals("Joe", result.firstName); | |
assertEquals("Sixpack", result.lastName); | |
assertEquals(42, result.age); | |
} | |
public void testLowerCaseAcronymsTranslations() throws Exception | |
{ | |
// First serialize | |
String json = mapper.writeValueAsString(new Acronyms("world wide web", "http://jackson.codehaus.org", "/path1/,/path2/")); | |
assertEquals("{\"www\":\"world wide web\",\"some_url\":\"http://jackson.codehaus.org\",\"some_uris\":\"/path1/,/path2/\"}", json); | |
// then deserialize | |
Acronyms result = mapper.readValue(json, Acronyms.class); | |
assertEquals("world wide web", result.WWW); | |
assertEquals("http://jackson.codehaus.org", result.someURL); | |
assertEquals("/path1/,/path2/", result.someURIs); | |
} | |
public void testLowerCaseOtherNonStandardNamesTranslations() throws Exception | |
{ | |
// First serialize | |
String json = mapper.writeValueAsString(new OtherNonStandardNames("Results", "_User", "___", "$User")); | |
assertEquals("{\"results\":\"Results\",\"user\":\"_User\",\"__\":\"___\",\"$_user\":\"$User\"}", json); | |
// then deserialize | |
OtherNonStandardNames result = mapper.readValue(json, OtherNonStandardNames.class); | |
assertEquals("Results", result.Results); | |
assertEquals("_User", result._User); | |
assertEquals("___", result.___); | |
assertEquals("$User", result.$User); | |
} | |
public void testLowerCaseUnchangedNames() throws Exception | |
{ | |
// First serialize | |
String json = mapper.writeValueAsString(new UnchangedNames("from_user", "_user", "from$user", "from7user", "_")); | |
assertEquals("{\"from_user\":\"from_user\",\"user\":\"_user\",\"from$user\":\"from$user\",\"from7user\":\"from7user\",\"_\":\"_\"}", json); | |
// then deserialize | |
UnchangedNames result = mapper.readValue(json, UnchangedNames.class); | |
assertEquals("from_user", result.from_user); | |
assertEquals("_user", result._user); | |
assertEquals("from$user", result.from$user); | |
assertEquals("from7user", result.from7user); | |
assertEquals("_", result._); | |
} | |
} |