@@ -0,0 +1,80 @@
1+package com.parseable.android
3+import com.parseable.android.data.formatBytes
4+import org.junit.Assert.*
7+class FormatBytesTest {
10+ fun `null input returns null`() {
11+ assertNull(formatBytes(null))
16+ assertEquals("0 B", formatBytes("0"))
20+ fun `small byte values`() {
21+ assertEquals("512 B", formatBytes("512"))
22+ assertEquals("1 B", formatBytes("1"))
27+ assertEquals("1.00 KB", formatBytes("1024"))
28+ assertEquals("1.50 KB", formatBytes("1536"))
33+ assertEquals("1.00 MB", formatBytes("1048576"))
34+ assertEquals("5.25 MB", formatBytes("5505024"))
39+ assertEquals("1.00 GB", formatBytes("1073741824"))
40+ assertEquals("2.50 GB", formatBytes("2684354560"))
45+ assertEquals("1.00 TB", formatBytes("1099511627776"))
49+ fun `large values use no decimals`() {
50+ // 150 GB = 161061273600
51+ assertEquals("150 GB", formatBytes("161061273600"))
55+ fun `mid-range values use one decimal`() {
56+ // 15.5 MB = 16252928
57+ assertEquals("15.5 MB", formatBytes("16252928"))
61+ fun `non-numeric string passes through unchanged`() {
62+ assertEquals("already formatted", formatBytes("already formatted"))
63+ assertEquals("1.5 GiB", formatBytes("1.5 GiB"))
67+ fun `negative value passes through unchanged`() {
68+ assertEquals("-1024", formatBytes("-1024"))
72+ fun `whitespace is trimmed before parsing`() {
73+ assertEquals("1.00 KB", formatBytes(" 1024 "))
77+ fun `fractional bytes from API`() {
78+ assertEquals("1.50 KB", formatBytes("1536.0"))