From 5b2cbe951692070194ead0d517900b98587429d6 Mon Sep 17 00:00:00 2001 From: Shubert Munthali Date: Fri, 11 Jul 2025 14:50:59 +0200 Subject: [PATCH] Add unit tests package and migrate test_color.kt to unit testing --- app/src/test/kotlin/com/bitchat/ColorTest.kt | 78 ++++++++++++++++++++ test_color.kt | 51 ------------- 2 files changed, 78 insertions(+), 51 deletions(-) create mode 100644 app/src/test/kotlin/com/bitchat/ColorTest.kt delete mode 100644 test_color.kt diff --git a/app/src/test/kotlin/com/bitchat/ColorTest.kt b/app/src/test/kotlin/com/bitchat/ColorTest.kt new file mode 100644 index 00000000..f21a571c --- /dev/null +++ b/app/src/test/kotlin/com/bitchat/ColorTest.kt @@ -0,0 +1,78 @@ +package com.bitchat + +import androidx.compose.ui.graphics.Color +import org.junit.Assert.assertEquals +import org.junit.Test + +/** + * Generate a consistent color for a username based on their peer ID or nickname + * Returns colors that work well on both light and dark backgrounds + */ + +class ColorTest { + fun getUsernameColor(identifier: String): Color { + // Hash the identifier to get a consistent number + val hash = identifier.hashCode().toUInt() + + // Terminal-friendly colors that work on both black and white backgrounds + val colors = listOf( + Color(0xFF00FF00), // Bright Green + Color(0xFF00FFFF), // Cyan + Color(0xFFFFFF00), // Yellow + Color(0xFFFF00FF), // Magenta + Color(0xFF0080FF), // Bright Blue + Color(0xFFFF8000), // Orange + Color(0xFF80FF00), // Lime Green + Color(0xFF8000FF), // Purple + Color(0xFFFF0080), // Pink + Color(0xFF00FF80), // Spring Green + Color(0xFF80FFFF), // Light Cyan + Color(0xFFFF8080), // Light Red + Color(0xFF8080FF), // Light Blue + Color(0xFFFFFF80), // Light Yellow + Color(0xFFFF80FF), // Light Magenta + Color(0xFF80FF80), // Light Green + ) + + // Use modulo to get consistent color for same identifier + return colors[(hash % colors.size.toUInt()).toInt()] + } + + @Test + fun is_username_derived_color_consistent() { + + println("Testing username color function:") + + val testUsers = listOf("alice", "bob", "charlie", "diana", "eve") + + testUsers.forEach { user -> + val color = getUsernameColor(user) + println("User '$user' gets color: ${color.value.toString(16).uppercase()}") + } + + val `alice'sColor` = getUsernameColor(testUsers[0]) + val `bob'sColor` = getUsernameColor(testUsers[1]) + val `charlie'sColor` = getUsernameColor(testUsers[2]) + val `diana'sColor` = getUsernameColor(testUsers[3]) + val `eve'sColor` = getUsernameColor(testUsers[4]) + + // Test consistency - same user should always get same color + println("\nTesting consistency:") + repeat(3) { + val `alice's_color` = getUsernameColor(testUsers[0]) + val `bob's_color` = getUsernameColor(testUsers[1]) + val `charlie's_color` = getUsernameColor(testUsers[2]) + val `diana's_color` = getUsernameColor(testUsers[3]) + val `eve's_color` = getUsernameColor(testUsers[4]) + + + assertEquals(`alice'sColor`, `alice's_color`) + assertEquals(`bob'sColor`, `bob's_color`) + assertEquals(`charlie'sColor`, `charlie's_color`) + assertEquals(`diana'sColor`, `diana's_color`) + assertEquals(`eve'sColor`, `eve's_color`) + + println("Alice color (test ${it + 1}): ${`alice'sColor`.value.toString(16).uppercase()}") + } + } +} \ No newline at end of file diff --git a/test_color.kt b/test_color.kt deleted file mode 100644 index f13cc7d2..00000000 --- a/test_color.kt +++ /dev/null @@ -1,51 +0,0 @@ -import androidx.compose.ui.graphics.Color - -/** - * Generate a consistent color for a username based on their peer ID or nickname - * Returns colors that work well on both light and dark backgrounds - */ -fun getUsernameColor(identifier: String): Color { - // Hash the identifier to get a consistent number - val hash = identifier.hashCode().toUInt() - - // Terminal-friendly colors that work on both black and white backgrounds - val colors = listOf( - Color(0xFF00FF00), // Bright Green - Color(0xFF00FFFF), // Cyan - Color(0xFFFFFF00), // Yellow - Color(0xFFFF00FF), // Magenta - Color(0xFF0080FF), // Bright Blue - Color(0xFFFF8000), // Orange - Color(0xFF80FF00), // Lime Green - Color(0xFF8000FF), // Purple - Color(0xFFFF0080), // Pink - Color(0xFF00FF80), // Spring Green - Color(0xFF80FFFF), // Light Cyan - Color(0xFFFF8080), // Light Red - Color(0xFF8080FF), // Light Blue - Color(0xFFFFFF80), // Light Yellow - Color(0xFFFF80FF), // Light Magenta - Color(0xFF80FF80), // Light Green - ) - - // Use modulo to get consistent color for same identifier - return colors[(hash % colors.size.toUInt()).toInt()] -} - -fun main() { - println("Testing username color function:") - - val testUsers = listOf("alice", "bob", "charlie", "diana", "eve") - - testUsers.forEach { user -> - val color = getUsernameColor(user) - println("User '$user' gets color: ${color.value.toString(16).uppercase()}") - } - - // Test consistency - same user should always get same color - println("\nTesting consistency:") - repeat(3) { - val aliceColor = getUsernameColor("alice") - println("Alice color (test ${it + 1}): ${aliceColor.value.toString(16).uppercase()}") - } -}