Skip to content

Commit

Permalink
Use toString for enum serialization (#2220)
Browse files Browse the repository at this point in the history
  • Loading branch information
adinauer committed Aug 17, 2022
1 parent bf18c0d commit c450270
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -8,6 +8,7 @@
- SentryOptions.setProfilingTracesIntervalMillis has been deprecated
- Added cpu architecture and default environment in profiles envelope ([#2207](https://github.com/getsentry/sentry-java/pull/2207))
- SentryOptions.setProfilingEnabled has been deprecated in favor of setProfilesSampleRate
- Use toString for enum serialization ([#2220](https://github.com/getsentry/sentry-java/pull/2220))

### Features

Expand Down
2 changes: 2 additions & 0 deletions sentry/src/main/java/io/sentry/JsonObjectSerializer.java
Expand Up @@ -46,6 +46,8 @@ public void serialize(
serializeCollection(writer, logger, Arrays.asList((Object[]) object));
} else if (object instanceof Map) {
serializeMap(writer, logger, (Map<?, ?>) object);
} else if (object.getClass().isEnum()) {
writer.value(object.toString());
} else {
try {
Object serializableObject = jsonReflectionObjectSerializer.serialize(object, logger);
Expand Down
Expand Up @@ -39,6 +39,8 @@ public final class JsonReflectionObjectSerializer {
return object;
} else if (object instanceof String) {
return object;
} else if (object.getClass().isEnum()) {
return object.toString();
} else {
if (visiting.contains(object)) {
logger.log(SentryLevel.INFO, "Cyclic reference detected. Calling toString() on object.");
Expand Down
34 changes: 34 additions & 0 deletions sentry/src/test/java/io/sentry/JsonObjectSerializerTest.kt
Expand Up @@ -119,6 +119,38 @@ internal class JsonObjectSerializerTest {
verify(fixture.writer).endObject()
}

@Test
fun `serialize enum`() {
fixture.getSUT().serialize(fixture.writer, fixture.logger, DataCategory.Session)
verify(fixture.writer).value("Session")
}

@Test
fun `serialize list of enum`() {
fixture.getSUT().serialize(fixture.writer, fixture.logger, listOf(DataCategory.Session))
verify(fixture.writer).beginArray()
verify(fixture.writer).value("Session")
verify(fixture.writer).endArray()
}

@Test
fun `serialize map of enum`() {
fixture.getSUT().serialize(fixture.writer, fixture.logger, mapOf("key" to DataCategory.Transaction))
verify(fixture.writer).beginObject()
verify(fixture.writer).name("key")
verify(fixture.writer).value("Transaction")
verify(fixture.writer).endObject()
}

@Test
fun `serialize object with enum property`() {
fixture.getSUT().serialize(fixture.writer, fixture.logger, ClassWithEnumProperty(DataCategory.Attachment))
verify(fixture.writer).beginObject()
verify(fixture.writer).name("enumProperty")
verify(fixture.writer).value("Attachment")
verify(fixture.writer).endObject()
}

@Test
fun `serialize unknown object with data`() {
val objectWithPrimitiveFields = UnknownClassWithData(
Expand All @@ -139,3 +171,5 @@ internal class JsonObjectSerializerTest {
private val string: String
)
}

data class ClassWithEnumProperty(val enumProperty: DataCategory)
Expand Up @@ -257,6 +257,12 @@ class JsonReflectionObjectSerializerTest {
verify(fixture.logger).log(SentryLevel.INFO, "Max depth exceeded. Calling toString() on object.")
}

@Test
fun `enum`() {
val actual = fixture.getSut().serialize(DataCategory.Error, fixture.logger)
assertEquals("Error", actual)
}

// Helper

class ClassWithPrimitiveFields(
Expand Down

0 comments on commit c450270

Please sign in to comment.