EnumNamingStrategiesTest.java
package com.fasterxml.jackson.databind.introspect;
import java.util.stream.Stream;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import com.fasterxml.jackson.databind.EnumNamingStrategy;
import com.fasterxml.jackson.databind.testutil.DatabindTestUtil;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static com.fasterxml.jackson.databind.EnumNamingStrategies.*;
/**
* Test case to verify functioning of standard
* {@link com.fasterxml.jackson.databind.EnumNamingStrategy}
* implementations Jackson includes out of the box.
*
* @since 2.15
*/
class EnumNamingStrategiesTest extends DatabindTestUtil {
/**
* Test cases for {@link com.fasterxml.jackson.databind.EnumNamingStrategies}.
*
* @since 2.19
*/
private static Stream<Arguments> enumNameConversionTestCases() {
return Stream.of(
// Empty values
Arguments.of(LOWER_CAMEL_CASE, null, null),
Arguments.of(UPPER_CAMEL_CASE, null, null),
Arguments.of(SNAKE_CASE, null, null),
Arguments.of(UPPER_SNAKE_CASE, null, null),
Arguments.of(LOWER_CASE, null, null),
Arguments.of(KEBAB_CASE, null, null),
Arguments.of(LOWER_DOT_CASE, null, null),
Arguments.of(LOWER_CAMEL_CASE, "", ""),
// input values with no underscores
Arguments.of(LOWER_CAMEL_CASE, "a", "a"),
Arguments.of(LOWER_CAMEL_CASE, "abc", "abc"),
Arguments.of(LOWER_CAMEL_CASE, "A", "a"),
Arguments.of(LOWER_CAMEL_CASE, "A1", "a1"),
Arguments.of(LOWER_CAMEL_CASE, "1A", "1a"),
Arguments.of(LOWER_CAMEL_CASE, "ABC", "abc"),
Arguments.of(LOWER_CAMEL_CASE, "User", "user"),
Arguments.of(LOWER_CAMEL_CASE, "Results", "results"),
Arguments.of(LOWER_CAMEL_CASE, "WWW", "www"),
Arguments.of(LOWER_CAMEL_CASE, "USER", "user"),
Arguments.of(LOWER_CAMEL_CASE, "userName", "username"),
Arguments.of(LOWER_CAMEL_CASE, "someURI", "someuri"),
Arguments.of(LOWER_CAMEL_CASE, "someURIs", "someuris"),
Arguments.of(LOWER_CAMEL_CASE, "theWWW", "thewww"),
Arguments.of(LOWER_CAMEL_CASE, "uId", "uid"),
Arguments.of(LOWER_CAMEL_CASE, "usId", "usid"),
Arguments.of(LOWER_CAMEL_CASE, "UserName", "username"),
Arguments.of(KEBAB_CASE, "UserName", "username"),
Arguments.of(LOWER_CAMEL_CASE, "user", "user"),
Arguments.of(LOWER_CAMEL_CASE, "xCoordinate", "xcoordinate"),
// input values with single underscores
Arguments.of(LOWER_CAMEL_CASE, "a_", "a"),
Arguments.of(LOWER_CAMEL_CASE, "_A", "A"),
Arguments.of(LOWER_CAMEL_CASE, "_a", "A"),
Arguments.of(LOWER_CAMEL_CASE, "a_A", "aA"),
Arguments.of(LOWER_CAMEL_CASE, "a_a", "aA"),
Arguments.of(LOWER_CAMEL_CASE, "A_A", "aA"),
Arguments.of(LOWER_CAMEL_CASE, "A_a", "aA"),
Arguments.of(LOWER_CAMEL_CASE, "BARS_", "bars"),
Arguments.of(LOWER_CAMEL_CASE, "BARS", "bars"),
Arguments.of(LOWER_CAMEL_CASE, "THE_WWW", "theWww"),
Arguments.of(LOWER_CAMEL_CASE, "U_ID", "uId"),
Arguments.of(LOWER_CAMEL_CASE, "US_ID", "usId"),
Arguments.of(LOWER_CAMEL_CASE, "X_COORDINATE", "xCoordinate"),
// heavy "username" example
Arguments.of(LOWER_CAMEL_CASE, "USERNAME_", "username"),
Arguments.of(LOWER_CAMEL_CASE, "_User_Name", "UserName"),
Arguments.of(LOWER_CAMEL_CASE, "_UserName", "Username"),
Arguments.of(LOWER_CAMEL_CASE, "_Username", "Username"),
Arguments.of(LOWER_CAMEL_CASE, "_user_name", "UserName"),
Arguments.of(LOWER_CAMEL_CASE, "_USERNAME", "Username"),
Arguments.of(LOWER_CAMEL_CASE, "__USERNAME", "Username"),
Arguments.of(LOWER_CAMEL_CASE, "__Username", "Username"),
Arguments.of(LOWER_CAMEL_CASE, "__username", "Username"),
Arguments.of(LOWER_CAMEL_CASE, "USER______NAME", "userName"),
Arguments.of(LOWER_CAMEL_CASE, "USER_NAME", "userName"),
Arguments.of(UPPER_CAMEL_CASE, "USER_NAME", "UserName"),
Arguments.of(SNAKE_CASE, "USER_NAME", "user_name"),
Arguments.of(UPPER_SNAKE_CASE, "USER_NAME", "USER_NAME"),
Arguments.of(LOWER_CASE, "USER_NAME", "username"),
Arguments.of(KEBAB_CASE, "USER_NAME", "user-name"),
Arguments.of(LOWER_DOT_CASE, "USER_NAME", "user.name"),
Arguments.of(LOWER_CAMEL_CASE, "USER__NAME", "userName"),
Arguments.of(LOWER_CAMEL_CASE, "USER_NAME_", "userName"),
Arguments.of(LOWER_CAMEL_CASE, "User__Name", "userName"),
Arguments.of(LOWER_CAMEL_CASE, "USER_NAME_S", "userNameS"),
Arguments.of(LOWER_CAMEL_CASE, "_user_name_s", "UserNameS"),
Arguments.of(LOWER_CAMEL_CASE, "USER_NAME_S", "userNameS"),
Arguments.of(LOWER_CAMEL_CASE, "user__name", "userName"),
Arguments.of(LOWER_CAMEL_CASE, "user_name", "userName"),
Arguments.of(LOWER_CAMEL_CASE, "USERNAME", "username"),
Arguments.of(LOWER_CAMEL_CASE, "username", "username"),
Arguments.of(LOWER_CAMEL_CASE, "User_Name", "userName"),
Arguments.of(LOWER_CAMEL_CASE, "User_Name_", "userName"),
Arguments.of(LOWER_CAMEL_CASE, "User_Name_", "userName"),
Arguments.of(LOWER_CAMEL_CASE, "User_Name__", "userName"),
Arguments.of(UPPER_SNAKE_CASE, "User_Name__", "USER_NAME"),
Arguments.of(LOWER_CAMEL_CASE, "user_name_", "userName"),
Arguments.of(LOWER_CAMEL_CASE, "user_name__", "userName"),
// additional variations
Arguments.of(LOWER_CAMEL_CASE, "a$a", "a$a"),
Arguments.of(LOWER_CAMEL_CASE, "A$A", "a$a"),
Arguments.of(LOWER_CAMEL_CASE, "a_$", "a$"),
Arguments.of(LOWER_CAMEL_CASE, "a$", "a$"),
Arguments.of(LOWER_CAMEL_CASE, "a1", "a1"),
Arguments.of(LOWER_CAMEL_CASE, "$", "$"),
Arguments.of(LOWER_CAMEL_CASE, "A$", "a$"),
Arguments.of(LOWER_CAMEL_CASE, "1", "1"),
Arguments.of(LOWER_CAMEL_CASE, "$_A", "$A"),
Arguments.of(LOWER_CAMEL_CASE, "$_a", "$A"),
Arguments.of(LOWER_CAMEL_CASE, "1_A", "1A"),
Arguments.of(LOWER_CAMEL_CASE, "1a", "1a"),
Arguments.of(LOWER_CAMEL_CASE, "A_$", "a$"),
Arguments.of(LOWER_CAMEL_CASE, "_123_41", "12341")
);
}
/**
* Unit test to verify the implementations of
* {@link com.fasterxml.jackson.databind.EnumNamingStrategy#convertEnumToExternalName(String)}
* without the context of an ObjectMapper.
*
* @since 2.19
*/
@ParameterizedTest
@MethodSource("enumNameConversionTestCases")
void testEnumNameConversions(EnumNamingStrategy strategy, String input, String output) {
String actual = strategy.convertEnumToExternalName(input);
assertEquals(output, actual);
}
}