@@ -3,18 +3,28 @@ package io.sentry.util
33import io.sentry.ILogger
44import io.sentry.JsonSerializable
55import io.sentry.JsonSerializer
6+ import io.sentry.ObjectWriter
7+ import io.sentry.SentryLogEvent
8+ import io.sentry.SentryLogLevel
9+ import io.sentry.SentryOptions
10+ import io.sentry.protocol.SentryId
611import java.io.Writer
712import java.util.Calendar
813import java.util.concurrent.atomic.AtomicIntegerArray
914import kotlin.test.Test
1015import kotlin.test.assertContentEquals
1116import kotlin.test.assertEquals
1217import kotlin.test.assertNull
18+ import kotlin.test.assertTrue
1319import org.mockito.invocation.InvocationOnMock
1420import org.mockito.kotlin.any
1521import org.mockito.kotlin.mock
1622
1723class JsonSerializationUtilsTest {
24+
25+ private val serializer = JsonSerializer (SentryOptions ())
26+ private val logger: ILogger = mock()
27+
1828 @Test
1929 fun `serializes calendar to map` () {
2030 val calendar = Calendar .getInstance()
@@ -74,4 +84,57 @@ class JsonSerializationUtilsTest {
7484
7585 assertNull(actualBytes, " Mocker error should be captured and null returned." )
7686 }
87+
88+ @Test
89+ fun `byteSizeOf returns same size as bytesFrom for ASCII` () {
90+ val logEvent = SentryLogEvent (SentryId (), 1234567890.0 , " Hello ASCII" , SentryLogLevel .INFO )
91+
92+ val actualBytes = JsonSerializationUtils .bytesFrom(serializer, logger, logEvent)
93+ val byteSize = JsonSerializationUtils .byteSizeOf(serializer, logger, logEvent)
94+
95+ assertEquals(
96+ (actualBytes?.size ? : - 1 ).toLong(),
97+ byteSize,
98+ " byteSizeOf should match actual byte array length" ,
99+ )
100+ assertTrue(byteSize > 0 , " byteSize should be positive" )
101+ }
102+
103+ @Test
104+ fun `byteSizeOf returns same size as bytesFrom for UTF-8 characters` () {
105+ // Mix of 1-byte, 2-byte, 3-byte and 4-byte UTF-8 characters
106+ val logEvent =
107+ SentryLogEvent (SentryId (), 1234567890.0 , " Hello 世界 café 🎉 🚀" , SentryLogLevel .WARN )
108+
109+ val actualBytes = JsonSerializationUtils .bytesFrom(serializer, logger, logEvent)
110+ val byteSize = JsonSerializationUtils .byteSizeOf(serializer, logger, logEvent)
111+
112+ assertEquals(
113+ (actualBytes?.size ? : - 1 ).toLong(),
114+ byteSize,
115+ " byteSizeOf should match actual byte array length for UTF-8" ,
116+ )
117+ assertTrue(byteSize > 0 , " byteSize should be positive" )
118+ }
119+
120+ @Test
121+ fun `byteSizeOf returns 0 on serialization error` () {
122+ val serializable =
123+ object : JsonSerializable {
124+ override fun serialize (writer : ObjectWriter , logger : ILogger ) {
125+ throw RuntimeException (" Serialization error" )
126+ }
127+ }
128+
129+ val byteSize = JsonSerializationUtils .byteSizeOf(serializer, logger, serializable)
130+
131+ assertEquals(0 , byteSize, " byteSizeOf should return 0 on error" )
132+ }
133+
134+ @Test
135+ fun `byteSizeOf returns 0 on null serializable` () {
136+ val byteSize = JsonSerializationUtils .byteSizeOf(serializer, logger, null )
137+
138+ assertEquals(0 , byteSize, " byteSizeOf should return 0 on null serializable" )
139+ }
77140}
0 commit comments