You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iceraven-browser/app/src/test/java/org/mozilla/fenix/components/metrics/AppLaunchTimeMeasurementTes...

80 lines
2.8 KiB
Kotlin

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.components.metrics
import android.os.SystemClock
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.mozilla.fenix.components.metrics.Event.AppAllStartup.Type.HOT
import org.mozilla.fenix.components.metrics.Event.AppAllStartup.Type.COLD
import org.mozilla.fenix.components.metrics.Event.AppAllStartup.Type.ERROR
import org.mozilla.fenix.components.metrics.Event.AppAllStartup.Type.WARM
import org.mozilla.fenix.perf.Stat
class AppLaunchTimeMeasurementTest {
@MockK
private lateinit var statMock: Stat
private lateinit var appLaunchTimeMeasurement: AppLaunchTimeMeasurement
private val startTime = SystemClock.elapsedRealtimeNanos()
private val endTime = SystemClock.elapsedRealtimeNanos() + 1
@Before
fun setUp() {
MockKAnnotations.init(this)
appLaunchTimeMeasurement = AppLaunchTimeMeasurement(statMock)
every { statMock.getProcessStartTimeStampNano(any()) } returns startTime
}
@Test
fun `WHEN application is launched with cold startup THEN report the correct value`() {
runBlocking {
appLaunchTimeMeasurement.onFirstFramePreDraw(endTime)
val actualResult = endTime.minus(startTime)
assertTrue(appLaunchTimeMeasurement.getApplicationLaunchTime(COLD) == actualResult)
}
}
@Test
fun `WHEN application is launch with warm startup THEN report the correct value`() {
appLaunchTimeMeasurement.onHomeActivityOnCreate(startTime)
appLaunchTimeMeasurement.onFirstFramePreDraw(endTime)
val actualResult = endTime.minus(startTime)
runBlocking {
assertTrue(appLaunchTimeMeasurement.getApplicationLaunchTime(WARM) == actualResult)
}
}
@Test
fun `WHEN application is launch with hot startup THEN report the correct value`() {
appLaunchTimeMeasurement.onHomeActivityOnRestart(startTime)
appLaunchTimeMeasurement.onFirstFramePreDraw(endTime)
val actualResult = endTime.minus(startTime)
runBlocking {
assertTrue(appLaunchTimeMeasurement.getApplicationLaunchTime(HOT) == actualResult)
}
}
@Test
fun `WHEN getting launch time before onDraw() is called THEN report the correct value`() {
appLaunchTimeMeasurement.onHomeActivityOnCreate(startTime)
val actualResult = null
runBlocking {
assertTrue(appLaunchTimeMeasurement.getApplicationLaunchTime(ERROR) == actualResult)
}
}
}