From c3e7a45629dd1e76f482e7dee51b4dab583b7368 Mon Sep 17 00:00:00 2001
From: apopovsap <66370584+apopovsap@users.noreply.github.com>
Date: Sun, 7 Jun 2020 19:12:54 +0300
Subject: [PATCH] Tests/formatter (#215)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* add unit test for util.formatter.formatterHelper

* Add tests for FormatterHelperTest & FormatterSettingsHelperTest

* Add tests for FormatterHelperTest & FormatterSettingsHelperTest

* actualised FormatterHelperTest & FormatterSettingsHelperTest

* relevant with dev branch

Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com>
Co-authored-by: Jakob Möller <jakob.moeller@sap.com>
---
 .../util/formatter/FormatterHelperTest.kt     | 156 ++++
 .../formatter/FormatterSettingsHelperTest.kt  | 671 ++++++++++++++++++
 2 files changed, 827 insertions(+)
 create mode 100644 Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterHelperTest.kt
 create mode 100644 Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelperTest.kt

diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterHelperTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterHelperTest.kt
new file mode 100644
index 000000000..adc407f7a
--- /dev/null
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterHelperTest.kt
@@ -0,0 +1,156 @@
+package de.rki.coronawarnapp.util.formatter
+
+import android.content.Context
+import android.graphics.drawable.Drawable
+import android.view.View
+import de.rki.coronawarnapp.CoronaWarnApplication
+import io.mockk.MockKAnnotations
+import io.mockk.every
+import io.mockk.impl.annotations.MockK
+import io.mockk.mockkObject
+import io.mockk.unmockkAll
+import org.hamcrest.CoreMatchers.`is`
+import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+
+
+class FormatterHelperTest {
+
+    @MockK
+    private lateinit var context: Context
+
+    @MockK
+    private lateinit var drawable: Drawable
+
+    @Before
+    fun setUp() {
+        MockKAnnotations.init(this)
+        mockkObject(CoronaWarnApplication.Companion)
+
+        every { CoronaWarnApplication.getAppContext() } returns context
+
+    }
+
+    private fun formatVisibilityBase(bValue: Boolean, iResult: Int){
+        val result = formatVisibility(value = bValue)
+        assertThat(result, `is`((iResult)))
+    }
+
+    private fun formatVisibilityIconBase(anyDrawable: Any?, iResult: Int) {
+        val result = formatVisibilityIcon(drawable = anyDrawable)
+        assertThat(result, `is`((iResult)))
+    }
+
+    private fun formatVisibilityInvertedBase(bValue: Boolean){
+        val result = formatVisibilityInverted(value = bValue)
+        assertThat(result, `is`((formatVisibility(!bValue))))
+    }
+
+    private fun formatVisibilityTextBase(bValue: Boolean, sText: String?){
+        val result = formatVisibilityText(text = sText)
+        assertThat(result, `is`((formatVisibility(bValue))))
+    }
+
+    private fun formatTextBase(bValue: Boolean?, iResult: Int) {
+        every { context.getString(1) } returns "true string"
+        every { context.getString(2) } returns "false string"
+
+        val result = formatText(value = bValue, stringTrue = 1, stringFalse = 2)
+        assertThat(result, `is`((CoronaWarnApplication.getAppContext().getString(iResult))))
+    }
+
+    private fun formatDrawableBase(bValue: Boolean)  {
+        every { context.getDrawable(1) } returns drawable
+        every { context.getDrawable(2) } returns drawable
+
+        val result = formatDrawable(value = bValue, drawableTrue = 1, drawableFalse = 2)
+        assertThat(result, `is`((equalTo(drawable))))
+    }
+
+    private fun formatColorBase(bValue: Boolean, iColor: Int)  {
+        every { context.getColor(1) } returns 1
+        every { context.getColor(2) } returns 2
+
+        val result = formatColor(value = bValue, colorTrue = 1, colorFalse = 2)
+        assertThat(result, `is`((context.getColor(iColor))))
+    }
+
+   @Test
+    fun formatVisibility() {
+       // Check visibility when value true
+       formatVisibilityBase(bValue = true, iResult = View.VISIBLE)
+
+       // Check visibility when value false
+       formatVisibilityBase(bValue = false, iResult = View.GONE)
+    }
+
+    @Test
+    fun formatVisibilityIcon() {
+        // Check visibilityIcon when value not null
+        formatVisibilityIconBase(anyDrawable = Any(), iResult = View.VISIBLE)
+
+        // Check visibilityIcon when value null
+        formatVisibilityIconBase(anyDrawable = null, iResult = View.GONE)
+    }
+
+    @Test
+    fun formatVisibilityInverted(){
+        // Check visibilityIcon when value true
+        formatVisibilityInvertedBase(bValue = true)
+
+        // Check visibilityIcon when value false
+        formatVisibilityInvertedBase(bValue = false)
+    }
+
+    @Test
+    fun formatVisibilityText(){
+        // Check visibilityText when value true and text is not empty
+        formatVisibilityTextBase(bValue = true, sText = "NOT_NULL_STRING")
+
+        // Check visibilityText when value true and text is null
+        formatVisibilityTextBase(bValue = false, sText = null)
+
+        // Check visibilityText when value true and text is empty
+        formatVisibilityTextBase(bValue = false, sText = "")
+    }
+
+    @Test
+    fun formatText(){
+        // Check  formatText when value true
+        formatTextBase(bValue = true, iResult = 1)
+
+        // Check  formatText when value false
+        formatTextBase(bValue = false, iResult = 2)
+
+        // Check  formatText when value false
+        formatTextBase(bValue = null, iResult = 2)
+    }
+
+
+    @Test
+    fun formatDrawable() {
+        // Check formatDrawable when value true
+        formatDrawableBase(bValue = true)
+
+        // Check formatDrawable when value false
+        formatDrawableBase(bValue = false)
+    }
+
+    @Test
+    fun formatColorFalse() {
+        // Check formatColor when value true
+        formatColorBase(bValue = true, iColor = 1)
+
+        // Check formatColor when value false
+        formatColorBase(bValue = false, iColor = 2)
+    }
+
+    @After
+    fun cleanUp() {
+        unmockkAll()
+    }
+
+}
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelperTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelperTest.kt
new file mode 100644
index 000000000..8b757701a
--- /dev/null
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelperTest.kt
@@ -0,0 +1,671 @@
+package de.rki.coronawarnapp.util.formatter
+
+import android.content.Context
+import android.graphics.drawable.Drawable
+import de.rki.coronawarnapp.CoronaWarnApplication
+import de.rki.coronawarnapp.R
+import io.mockk.MockKAnnotations
+import io.mockk.every
+import io.mockk.impl.annotations.MockK
+import io.mockk.mockkObject
+import io.mockk.unmockkAll
+import org.hamcrest.CoreMatchers
+import org.hamcrest.CoreMatchers.`is`
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+
+class FormatterSettingsHelperTest {
+
+    @MockK
+    private lateinit var context: Context
+
+    @MockK
+    private lateinit var drawable: Drawable
+
+    @Before
+    fun setUp() {
+        MockKAnnotations.init(this)
+        mockkObject(CoronaWarnApplication)
+
+        every { CoronaWarnApplication.getAppContext() } returns context
+        every { context.getString(R.string.settings_on) } returns "settings_on"
+        every { context.getString(R.string.settings_off) } returns "settings_off"
+        every { context.getString(R.string.settings_notifications_headline_active) } returns "settings_notifications_headline_active"
+        every { context.getString(R.string.settings_notifications_headline_inactive) } returns "settings_notifications_headline_inactive"
+        every { context.getString(R.string.settings_notifications_body_active) } returns "settings_notifications_body_active"
+        every { context.getString(R.string.settings_notifications_body_inactive) } returns "settings_notifications_body_inactive"
+        every { context.getColor(R.color.colorAccentTintIcon) } returns R.color.colorAccentTintIcon
+        every { context.getColor(R.color.colorTextPrimary3) } returns R.color.colorTextPrimary3
+
+    }
+
+    private fun formatStatusBase(bValue: Boolean) {
+        val result = formatStatus(value = bValue)
+        assertThat(
+            result, `is`(
+                (formatText(
+                    bValue,
+                    R.string.settings_on,
+                    R.string.settings_off
+                ))
+            )
+        )
+    }
+
+    private fun formatNotificationsStatusTextBase(
+        bNotifications: Boolean,
+        bNotificationsRisk: Boolean,
+        bNotificationsTest: Boolean,
+        bValue: Boolean
+    ) {
+        val result = formatNotificationsStatusText(
+            notifications = bNotifications,
+            notificationsRisk = bNotificationsRisk,
+            notificationsTest = bNotificationsTest
+        )
+        assertThat(result, `is`((formatStatus(bValue))))
+    }
+
+    private fun formatTracingStatusBase(bTracing: Boolean, bBluetooth: Boolean, bConnection: Boolean, iValue: Int) {
+        every { context.getString(R.string.settings_tracing_status_restricted) } returns R.string.settings_tracing_status_restricted.toString()
+        every { context.getString(R.string.settings_tracing_status_active) } returns R.string.settings_tracing_status_active.toString()
+        every { context.getString(R.string.settings_tracing_status_inactive) } returns R.string.settings_tracing_status_inactive.toString()
+
+        val result = formatTracingStatusText(tracing = bTracing, bluetooth = bBluetooth, connection = bConnection)
+        assertThat(result, `is`((context.getString(iValue))))
+    }
+
+    private fun formatTracingDescriptionBase(
+        bTracing: Boolean,
+        bBluetooth: Boolean,
+        bConnection: Boolean,
+        iValue: Int
+    ) {
+        every { context.getString(R.string.settings_tracing_body_bluetooth_inactive) } returns R.string.settings_tracing_body_bluetooth_inactive.toString()
+        every { context.getString(R.string.settings_tracing_body_connection_inactive) } returns R.string.settings_tracing_body_connection_inactive.toString()
+        every { context.getString(R.string.settings_tracing_body_active) } returns R.string.settings_tracing_body_active.toString()
+        every { context.getString(R.string.settings_tracing_body_inactive) } returns R.string.settings_tracing_body_inactive.toString()
+
+        val result = formatTracingDescription(tracing = bTracing, bluetooth = bBluetooth, connection = bConnection)
+        assertThat(result, `is`((context.getString(iValue))))
+    }
+
+    private fun formatNotificationsTitleBase(bValue: Boolean) {
+        val result = formatNotificationsTitle(notifications = bValue)
+        assertThat(
+            result, `is`(
+                (formatText(
+                    bValue,
+                    R.string.settings_notifications_headline_active,
+                    R.string.settings_notifications_headline_inactive
+                ))
+            )
+        )
+    }
+
+    private fun formatNotificationsDescriptionBase(bValue: Boolean) {
+        val result = formatNotificationsDescription(notifications = bValue)
+        assertThat(
+            result, `is`(
+                (formatText(
+                    bValue,
+                    R.string.settings_notifications_body_active,
+                    R.string.settings_notifications_body_inactive
+                ))
+            )
+        )
+    }
+
+    private fun formatIconColorBase(bActive: Boolean) {
+        val result = formatIconColor(active = bActive)
+        assertThat(
+            result, `is`(
+                (formatColor(bActive, R.color.colorAccentTintIcon, R.color.colorTextPrimary3))
+            )
+        )
+    }
+
+    private fun formatTracingSwitchBase(bTracing: Boolean, bBluetooth: Boolean, bConnection: Boolean, bValue: Boolean) {
+        val result = formatTracingSwitch(tracing = bTracing, bluetooth = bBluetooth, connection = bConnection)
+        assertThat(
+            result, `is`(bValue)
+        )
+    }
+
+    private fun formatTracingSwitchEnabledBase(
+        bTracing: Boolean,
+        bBluetooth: Boolean,
+        bConnection: Boolean,
+        bValue: Boolean
+    ) {
+        val result = formatTracingSwitchEnabled(tracing = bTracing, bluetooth = bBluetooth, connection = bConnection)
+        assertThat(
+            result, `is`(bValue)
+        )
+    }
+
+    private fun formatTracingIconBase(bTracing: Boolean, bBluetooth: Boolean, bConnection: Boolean) {
+        every { context.getDrawable(R.drawable.ic_settings_tracing_bluetooth_inactive) } returns drawable
+        every { context.getDrawable(R.drawable.ic_settings_tracing_connection_inactive) } returns drawable
+        every { context.getDrawable(R.drawable.ic_settings_tracing_active) } returns drawable
+        every { context.getDrawable(R.drawable.ic_settings_tracing_inactive) } returns drawable
+
+        val result = formatTracingIcon(tracing = bTracing, bluetooth = bBluetooth, connection = bConnection)
+        assertThat(
+            result, `is`(CoreMatchers.equalTo(drawable))
+        )
+    }
+
+    private fun formatTracingIconColorBase(bTracing: Boolean, bBluetooth: Boolean, bConnection: Boolean, iColor: Int) {
+        every { context.getColor(R.color.colorAccentTintIcon) } returns R.color.colorAccentTintIcon
+        every { context.getColor(R.color.colorTextSemanticRed) } returns R.color.colorTextSemanticRed
+
+        val result = formatTracingIconColor(tracing = bTracing, bluetooth = bBluetooth, connection = bConnection)
+        assertThat(
+            result, `is`(context.getColor(iColor))
+        )
+    }
+
+    private fun formatTracingStatusImageBase(bTracing: Boolean, bBluetooth: Boolean, bConnection: Boolean) {
+        every { context.getDrawable(R.drawable.ic_settings_illustration_bluetooth_off) } returns drawable
+        every { context.getDrawable(R.drawable.ic_settings_illustration_connection_off) } returns drawable
+        every { context.getDrawable(R.drawable.ic_illustration_tracing_on) } returns drawable
+        every { context.getDrawable(R.drawable.ic_settings_illustration_tracing_off) } returns drawable
+
+        val result = formatTracingStatusImage(tracing = bTracing, bluetooth = bBluetooth, connection = bConnection)
+        assertThat(
+            result, `is`(CoreMatchers.equalTo(drawable))
+        )
+    }
+
+    private fun formatTracingStatusConnectionBase(
+        bTracing: Boolean,
+        bBluetooth: Boolean,
+        bConnection: Boolean
+    ) {
+        val result = formatTracingStatusConnection(tracing = bTracing, bluetooth = bBluetooth, connection = bConnection)
+        assertThat(true, `is`(result > -1))
+    }
+
+    private fun formatTracingStatusVisibilityTracingBase(
+        bTracing: Boolean,
+        bBluetooth: Boolean,
+        bConnection: Boolean
+    ) {
+        val result =
+            formatTracingStatusVisibilityTracing(tracing = bTracing, bluetooth = bBluetooth, connection = bConnection)
+        assertThat(true, `is`(result > -1))
+    }
+
+    private fun formatTracingStatusVisibilityBluetoothBase(
+        bTracing: Boolean,
+        bBluetooth: Boolean,
+        bConnection: Boolean
+    ) {
+        val result =
+            formatTracingStatusVisibilityBluetooth(tracing = bTracing, bluetooth = bBluetooth, connection = bConnection)
+        assertThat(true, `is`(result > -1))
+    }
+
+    private fun formatNotificationImageBase(bNotifications: Boolean) {
+        every { context.getDrawable(R.drawable.ic_illustration_notification_on) } returns drawable
+        every { context.getDrawable(R.drawable.ic_settings_illustration_notification_off) } returns drawable
+
+        val result = formatDrawable(
+            bNotifications,
+            R.drawable.ic_illustration_notification_on,
+            R.drawable.ic_settings_illustration_notification_off
+        )
+        assertThat(
+            result, `is`(CoreMatchers.equalTo(drawable))
+        )
+    }
+
+
+    @Test
+    fun formatStatus() {
+        // When status true
+        formatStatusBase(true)
+
+        // When status false
+        formatStatusBase(false)
+    }
+
+    @Test
+    fun formatNotificationsStatusText() {
+        // When notifications is true, notificationsRisk is true, notificationsTest is true
+        formatNotificationsStatusTextBase(
+            bNotifications = true,
+            bNotificationsRisk = true,
+            bNotificationsTest = true, bValue = true
+        )
+
+        // When notifications is false, notificationsRisk is false, notificationsTest is false
+        formatNotificationsStatusTextBase(
+            bNotifications = false,
+            bNotificationsRisk = true,
+            bNotificationsTest = true,
+            bValue = false
+        )
+
+        // When notifications is true, notificationsRisk is false, notificationsTest is true
+        formatNotificationsStatusTextBase(
+            bNotifications = true,
+            bNotificationsRisk = false,
+            bNotificationsTest = true,
+            bValue = true
+        )
+
+        // When notifications is true, notificationsRisk is true, notificationsTest is false
+        formatNotificationsStatusTextBase(
+            bNotifications = true,
+            bNotificationsRisk = true,
+            bNotificationsTest = false,
+            bValue = true
+        )
+
+        // When notifications is true, notificationsRisk is false, notificationsTest is false
+        formatNotificationsStatusTextBase(
+            bNotifications = true,
+            bNotificationsRisk = false,
+            bNotificationsTest = false,
+            bValue = false
+        )
+
+        // When notifications is false, notificationsRisk is false, notificationsTest is false
+        formatNotificationsStatusTextBase(
+            bNotifications = false,
+            bNotificationsRisk = false,
+            bNotificationsTest = false,
+            bValue = false
+        )
+
+        // When notifications is false, notificationsRisk is true, notificationsTest is false
+        formatNotificationsStatusTextBase(
+            bNotifications = false,
+            bNotificationsRisk = true,
+            bNotificationsTest = false,
+            bValue = false
+        )
+
+        // When notifications is false, notificationsRisk is false, notificationsTest is true
+        formatNotificationsStatusTextBase(
+            bNotifications = false,
+            bNotificationsRisk = false,
+            bNotificationsTest = true,
+            bValue = false
+        )
+
+    }
+
+    @Test
+    fun formatTracingStatusText() {
+        // When tracing is true, bluetooth is true, connection is true
+        formatTracingStatusBase(
+            bTracing = true,
+            bBluetooth = true,
+            bConnection = true,
+            iValue = R.string.settings_tracing_status_active
+        )
+
+        // When tracing is false, bluetooth is false, connection is false
+        formatTracingStatusBase(
+            bTracing = false,
+            bBluetooth = false,
+            bConnection = false,
+            iValue = R.string.settings_tracing_status_inactive
+        )
+
+        // When tracing is true, bluetooth is false, connection is false
+        formatTracingStatusBase(
+            bTracing = true,
+            bBluetooth = false,
+            bConnection = false,
+            iValue = R.string.settings_tracing_status_restricted
+        )
+
+        // When tracing is true, bluetooth is true, connection is false
+        formatTracingStatusBase(
+            bTracing = true,
+            bBluetooth = true,
+            bConnection = false,
+            iValue = R.string.settings_tracing_status_restricted
+        )
+
+        // When tracing is false, bluetooth is true, connection is false
+        formatTracingStatusBase(
+            bTracing = false,
+            bBluetooth = true,
+            bConnection = false,
+            iValue = R.string.settings_tracing_status_inactive
+        )
+
+        // When tracing is false, bluetooth is true, connection is true
+        formatTracingStatusBase(
+            bTracing = false,
+            bBluetooth = true,
+            bConnection = true,
+            iValue = R.string.settings_tracing_status_inactive
+        )
+
+        // When tracing is true, bluetooth is false, connection is true
+        formatTracingStatusBase(
+            bTracing = true,
+            bBluetooth = false,
+            bConnection = true,
+            iValue = R.string.settings_tracing_status_restricted
+        )
+
+        // When tracing is false, bluetooth is false, connection is true
+        formatTracingStatusBase(
+            bTracing = false,
+            bBluetooth = false,
+            bConnection = true,
+            iValue = R.string.settings_tracing_status_inactive
+        )
+
+    }
+
+    @Test
+    fun formatTracingDescription() {
+        // When tracing is true, bluetooth is true, connection is true
+        formatTracingDescriptionBase(
+            bTracing = true,
+            bBluetooth = true,
+            bConnection = true,
+            iValue = R.string.settings_tracing_body_active
+        )
+
+        // When tracing is false, bluetooth is false, connection is false
+        formatTracingDescriptionBase(
+            bTracing = false,
+            bBluetooth = false,
+            bConnection = false,
+            iValue = R.string.settings_tracing_body_inactive
+        )
+
+        // When tracing is true, bluetooth is false, connection is false
+        formatTracingDescriptionBase(
+            bTracing = true,
+            bBluetooth = false,
+            bConnection = false,
+            iValue = R.string.settings_tracing_body_bluetooth_inactive
+        )
+
+        // When tracing is true, bluetooth is true, connection is false
+        formatTracingDescriptionBase(
+            bTracing = true,
+            bBluetooth = true,
+            bConnection = false,
+            iValue = R.string.settings_tracing_body_connection_inactive
+        )
+
+        // When tracing is false, bluetooth is true, connection is false
+        formatTracingDescriptionBase(
+            bTracing = false,
+            bBluetooth = true,
+            bConnection = false,
+            iValue = R.string.settings_tracing_body_inactive
+        )
+
+        // When tracing is false, bluetooth is true, connection is true
+        formatTracingDescriptionBase(
+            bTracing = false,
+            bBluetooth = true,
+            bConnection = true,
+            iValue = R.string.settings_tracing_body_inactive
+        )
+
+        // When tracing is true, bluetooth is false, connection is true
+        formatTracingDescriptionBase(
+            bTracing = true,
+            bBluetooth = false,
+            bConnection = true,
+            iValue = R.string.settings_tracing_body_bluetooth_inactive
+        )
+
+        // When tracing is false, bluetooth is false, connection is true
+        formatTracingDescriptionBase(
+            bTracing = false,
+            bBluetooth = false,
+            bConnection = true,
+            iValue = R.string.settings_tracing_body_inactive
+        )
+
+    }
+
+    @Test
+    fun formatNotificationsTitle() {
+        // When status true
+        formatNotificationsTitleBase(bValue = true)
+
+        // When status false
+        formatNotificationsTitleBase(bValue = false)
+    }
+
+    @Test
+    fun formatNotificationsDescription() {
+        // When status true
+        formatNotificationsDescriptionBase(bValue = true)
+
+        // When status false
+        formatNotificationsDescriptionBase(bValue = false)
+    }
+
+    @Test
+    fun formatIconColor() {
+        // When status true
+        formatIconColorBase(bActive = true)
+
+        // When status false
+        formatIconColorBase(bActive = false)
+    }
+
+    @Test
+    fun formatTracingSwitch() {
+        formatTracingSwitchBase(bTracing = true, bBluetooth = true, bConnection = true, bValue = true)
+
+        formatTracingSwitchBase(bTracing = false, bBluetooth = false, bConnection = false, bValue = false)
+
+        formatTracingSwitchBase(bTracing = false, bBluetooth = false, bConnection = true, bValue = false)
+
+        formatTracingSwitchBase(bTracing = false, bBluetooth = true, bConnection = false, bValue = false)
+
+        formatTracingSwitchBase(bTracing = false, bBluetooth = true, bConnection = true, bValue = false)
+
+        formatTracingSwitchBase(bTracing = true, bBluetooth = false, bConnection = false, bValue = false)
+
+        formatTracingSwitchBase(bTracing = true, bBluetooth = false, bConnection = true, bValue = false)
+
+        formatTracingSwitchBase(bTracing = true, bBluetooth = true, bConnection = false, bValue = false)
+    }
+
+    @Test
+    fun formatTracingSwitchEnabled() {
+
+        formatTracingSwitchEnabledBase(bTracing = true, bBluetooth = true, bConnection = true, bValue = true)
+
+        formatTracingSwitchEnabledBase(bTracing = false, bBluetooth = false, bConnection = false, bValue = true)
+
+        formatTracingSwitchEnabledBase(bTracing = false, bBluetooth = false, bConnection = true, bValue = true)
+
+        formatTracingSwitchEnabledBase(bTracing = false, bBluetooth = true, bConnection = false, bValue = true)
+
+        formatTracingSwitchEnabledBase(bTracing = false, bBluetooth = true, bConnection = true, bValue = true)
+
+        formatTracingSwitchEnabledBase(bTracing = true, bBluetooth = false, bConnection = false, bValue = false)
+
+        formatTracingSwitchEnabledBase(bTracing = true, bBluetooth = false, bConnection = true, bValue = false)
+
+        formatTracingSwitchEnabledBase(bTracing = true, bBluetooth = true, bConnection = false, bValue = false)
+    }
+
+    @Test
+    fun formatTracingIcon() {
+        formatTracingIconBase(bTracing = true, bBluetooth = true, bConnection = true)
+
+        formatTracingIconBase(bTracing = false, bBluetooth = false, bConnection = false)
+
+        formatTracingIconBase(bTracing = false, bBluetooth = false, bConnection = true)
+
+        formatTracingIconBase(bTracing = false, bBluetooth = true, bConnection = false)
+
+        formatTracingIconBase(bTracing = false, bBluetooth = true, bConnection = true)
+
+        formatTracingIconBase(bTracing = true, bBluetooth = false, bConnection = false)
+
+        formatTracingIconBase(bTracing = true, bBluetooth = false, bConnection = true)
+
+        formatTracingIconBase(bTracing = true, bBluetooth = true, bConnection = false)
+    }
+
+    @Test
+    fun formatTracingIconColor() {
+
+        formatTracingIconColorBase(
+            bTracing = true,
+            bBluetooth = true,
+            bConnection = true,
+            iColor = R.color.colorAccentTintIcon
+        )
+
+        formatTracingIconColorBase(
+            bTracing = false,
+            bBluetooth = false,
+            bConnection = false,
+            iColor = R.color.colorTextSemanticRed
+        )
+
+        formatTracingIconColorBase(
+            bTracing = false,
+            bBluetooth = false,
+            bConnection = true,
+            iColor = R.color.colorTextSemanticRed
+        )
+
+        formatTracingIconColorBase(
+            bTracing = false,
+            bBluetooth = true,
+            bConnection = false,
+            iColor = R.color.colorTextSemanticRed
+        )
+
+        formatTracingIconColorBase(
+            bTracing = false,
+            bBluetooth = true,
+            bConnection = true,
+            iColor = R.color.colorTextSemanticRed
+        )
+
+        formatTracingIconColorBase(
+            bTracing = true,
+            bBluetooth = false,
+            bConnection = false,
+            iColor = R.color.colorTextSemanticRed
+        )
+
+        formatTracingIconColorBase(
+            bTracing = true,
+            bBluetooth = false,
+            bConnection = true,
+            iColor = R.color.colorTextSemanticRed
+        )
+
+        formatTracingIconColorBase(
+            bTracing = true,
+            bBluetooth = true,
+            bConnection = false,
+            iColor = R.color.colorTextSemanticRed
+        )
+    }
+
+    @Test
+    fun formatTracingStatusImage() {
+        formatTracingStatusImageBase(bTracing = true, bBluetooth = true, bConnection = true)
+
+        formatTracingStatusImageBase(bTracing = false, bBluetooth = false, bConnection = false)
+
+        formatTracingStatusImageBase(bTracing = false, bBluetooth = false, bConnection = true)
+
+        formatTracingStatusImageBase(bTracing = false, bBluetooth = true, bConnection = false)
+
+        formatTracingStatusImageBase(bTracing = false, bBluetooth = true, bConnection = true)
+
+        formatTracingStatusImageBase(bTracing = true, bBluetooth = false, bConnection = false)
+
+        formatTracingStatusImageBase(bTracing = true, bBluetooth = false, bConnection = true)
+
+        formatTracingStatusImageBase(bTracing = true, bBluetooth = true, bConnection = false)
+    }
+
+    @Test
+    fun formatTracingStatusConnection() {
+        formatTracingStatusConnectionBase(bTracing = true, bBluetooth = true, bConnection = true)
+
+        formatTracingStatusConnectionBase(bTracing = false, bBluetooth = false, bConnection = false)
+
+        formatTracingStatusConnectionBase(bTracing = false, bBluetooth = false, bConnection = true)
+
+        formatTracingStatusConnectionBase(bTracing = false, bBluetooth = true, bConnection = false)
+
+        formatTracingStatusConnectionBase(bTracing = false, bBluetooth = true, bConnection = true)
+
+        formatTracingStatusConnectionBase(bTracing = true, bBluetooth = false, bConnection = false)
+
+        formatTracingStatusConnectionBase(bTracing = true, bBluetooth = false, bConnection = true)
+
+        formatTracingStatusConnectionBase(bTracing = true, bBluetooth = true, bConnection = false)
+    }
+
+    @Test
+    fun formatTracingStatusVisibilityBluetooth() {
+        formatTracingStatusVisibilityBluetoothBase(bTracing = true, bBluetooth = true, bConnection = true)
+
+        formatTracingStatusVisibilityBluetoothBase(bTracing = false, bBluetooth = false, bConnection = false)
+
+        formatTracingStatusVisibilityBluetoothBase(bTracing = false, bBluetooth = false, bConnection = true)
+
+        formatTracingStatusVisibilityBluetoothBase(bTracing = false, bBluetooth = true, bConnection = false)
+
+        formatTracingStatusVisibilityBluetoothBase(bTracing = false, bBluetooth = true, bConnection = true)
+
+        formatTracingStatusVisibilityBluetoothBase(bTracing = true, bBluetooth = false, bConnection = false)
+
+        formatTracingStatusConnectionBase(bTracing = true, bBluetooth = false, bConnection = true)
+
+        formatTracingStatusConnectionBase(bTracing = true, bBluetooth = true, bConnection = false)
+    }
+
+    @Test
+    fun formatTracingStatusVisibilityTracing() {
+        formatTracingStatusVisibilityTracingBase(bTracing = true, bBluetooth = true, bConnection = true)
+
+        formatTracingStatusVisibilityTracingBase(bTracing = false, bBluetooth = false, bConnection = false)
+
+        formatTracingStatusVisibilityTracingBase(bTracing = false, bBluetooth = false, bConnection = true)
+
+        formatTracingStatusVisibilityTracingBase(bTracing = false, bBluetooth = true, bConnection = false)
+
+        formatTracingStatusVisibilityTracingBase(bTracing = false, bBluetooth = true, bConnection = true)
+
+        formatTracingStatusVisibilityTracingBase(bTracing = true, bBluetooth = false, bConnection = false)
+
+        formatTracingStatusVisibilityTracingBase(bTracing = true, bBluetooth = false, bConnection = true)
+
+        formatTracingStatusVisibilityTracingBase(bTracing = true, bBluetooth = true, bConnection = false)
+    }
+
+    @Test
+    fun formatNotificationImage() {
+        formatNotificationImageBase(bNotifications = true)
+
+        formatNotificationImageBase(bNotifications = false)
+    }
+
+    @After
+    fun cleanUp() {
+        unmockkAll()
+    }
+}
-- 
GitLab