fix(common): UTC 상대시간 파싱을 보완한다
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
package kr.co.vividnext.sodalive.common
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Context
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.robolectric.RobolectricTestRunner
|
||||
import org.robolectric.annotation.Config
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
import java.util.TimeZone
|
||||
|
||||
@RunWith(RobolectricTestRunner::class)
|
||||
@Config(sdk = [28], application = Application::class)
|
||||
class RelativeTimeFormatterTest {
|
||||
|
||||
private val context: Context = ApplicationProvider.getApplicationContext()
|
||||
|
||||
@Test
|
||||
fun `epoch millis는 기존처럼 실제 경과 분을 표시한다`() {
|
||||
val twoMinutesAgoMillis = System.currentTimeMillis() - 2 * MINUTE
|
||||
|
||||
val text = formatUtcRelativeTimeText(context, twoMinutesAgoMillis.toString())
|
||||
|
||||
assertEquals(context.getString(R.string.character_comment_time_minutes, 2), text)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `epoch seconds는 초 단위로 파싱한다`() {
|
||||
val twoHoursAgoSeconds = (System.currentTimeMillis() - 2 * HOUR) / 1000
|
||||
|
||||
val text = formatUtcRelativeTimeText(context, twoHoursAgoSeconds.toString())
|
||||
|
||||
assertEquals(context.getString(R.string.character_comment_time_hours, 2), text)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `ISO UTC 문자열은 작성 직후 서버 단말 시계 차이를 방금전으로 보정한다`() {
|
||||
val sixMinutesAgoIso = utcIso(System.currentTimeMillis() - 6 * MINUTE)
|
||||
|
||||
val text = formatUtcRelativeTimeText(context, sixMinutesAgoIso)
|
||||
|
||||
assertEquals(context.getString(R.string.character_comment_time_just_now), text)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `ISO offset 문자열과 6자리 fraction을 UTC 기준으로 파싱한다`() {
|
||||
val value = utcIso(System.currentTimeMillis())
|
||||
.replace(".000Z", ".123456+00:00")
|
||||
|
||||
val text = formatUtcRelativeTimeText(context, value)
|
||||
|
||||
assertEquals(context.getString(R.string.character_comment_time_just_now), text)
|
||||
}
|
||||
|
||||
private fun utcIso(millis: Long): String {
|
||||
return SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US).apply {
|
||||
timeZone = TimeZone.getTimeZone("UTC")
|
||||
}.format(Date(millis))
|
||||
}
|
||||
|
||||
private companion object {
|
||||
const val MINUTE = 60_000L
|
||||
const val HOUR = 60 * MINUTE
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user