Add tests for enum constant toString() reading (#2080)

This commit is contained in:
Marcono1234 2022-02-21 23:53:59 +01:00 committed by GitHub
parent 7ee3e2787f
commit b5343ba96c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -37,6 +37,7 @@ import java.util.EnumSet;
import java.util.Map;
import java.util.Set;
import junit.framework.TestCase;
/**
* Functional tests for Java 5.0 enums.
*
@ -174,7 +175,7 @@ public class EnumTest extends TestCase {
assertEquals(expectedMap, actualMap);
}
public enum Roshambo {
private enum Roshambo {
ROCK {
@Override Roshambo defeats() {
return SCISSORS;
@ -206,7 +207,7 @@ public class EnumTest extends TestCase {
}
}
public enum Gender {
private enum Gender {
@SerializedName("boy")
MALE,
@ -217,9 +218,10 @@ public class EnumTest extends TestCase {
public void testEnumClassWithFields() {
assertEquals("\"RED\"", gson.toJson(Color.RED));
assertEquals("red", gson.fromJson("RED", Color.class).value);
assertEquals(2, gson.fromJson("BLUE", Color.class).index);
}
public enum Color {
private enum Color {
RED("red", 1), BLUE("blue", 2), GREEN("green", 3);
String value;
int index;
@ -228,4 +230,47 @@ public class EnumTest extends TestCase {
this.index = index;
}
}
public void testEnumToStringRead() {
// Should still be able to read constant name
assertEquals(CustomToString.A, gson.fromJson("\"A\"", CustomToString.class));
// Should be able to read toString() value
assertEquals(CustomToString.A, gson.fromJson("\"test\"", CustomToString.class));
assertNull(gson.fromJson("\"other\"", CustomToString.class));
}
private enum CustomToString {
A;
@Override
public String toString() {
return "test";
}
}
/**
* Test that enum constant names have higher precedence than {@code toString()}
* result.
*/
public void testEnumToStringReadInterchanged() {
assertEquals(InterchangedToString.A, gson.fromJson("\"A\"", InterchangedToString.class));
assertEquals(InterchangedToString.B, gson.fromJson("\"B\"", InterchangedToString.class));
}
private enum InterchangedToString {
A("B"),
B("A");
private final String toString;
InterchangedToString(String toString) {
this.toString = toString;
}
@Override
public String toString() {
return toString;
}
}
}