You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MapsTest.kt 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package com.dmdirc.ktirc.model
  2. import com.dmdirc.ktirc.io.CaseMapping
  3. import org.junit.jupiter.api.Assertions.*
  4. import org.junit.jupiter.api.Test
  5. internal class CaseInsensitiveMapTest {
  6. private data class Wrapper(val name: String)
  7. private var caseMapping = CaseMapping.Rfc
  8. private val map = object : CaseInsensitiveMap<Wrapper>({ caseMapping }, { it -> it.name }) {}
  9. @Test
  10. fun `stores values`() {
  11. val value = Wrapper("acidBurn")
  12. map += value
  13. assertSame(value, map["acidBurn"])
  14. }
  15. @Test
  16. fun `ignores the same value twice`() {
  17. val value = Wrapper("acidBurn")
  18. map += value
  19. map += value
  20. assertSame(value, map["acidBurn"])
  21. assertEquals(1, map.count())
  22. }
  23. @Test
  24. fun `retrieves values using differently cased keys`() {
  25. val value = Wrapper("[acidBurn]")
  26. map += value
  27. assertSame(value, map["{ACIDBURN}"])
  28. }
  29. @Test
  30. fun `CaseInsensitiveMap retrieves values if the casemapping changes`() {
  31. val value = Wrapper("[acidBurn]")
  32. map += value
  33. caseMapping = CaseMapping.Ascii
  34. assertSame(value, map["[ACIDBURN]"])
  35. assertNull(map["{acidburn}"])
  36. }
  37. @Test
  38. fun `CaseInsensitiveMap retrieves null if value not found`() {
  39. val value = Wrapper("[acidBurn]")
  40. map += value
  41. assertNull(map["acidBurn"])
  42. assertNull(map["thePlague"])
  43. }
  44. @Test
  45. fun `CaseInsensitiveMap removes values`() {
  46. map += Wrapper("acidBurn")
  47. map -= "ACIDburn"
  48. assertNull(map["acidBurn"])
  49. }
  50. @Test
  51. fun `CaseInsensitiveMap can be iterated`() {
  52. map += Wrapper("acidBurn")
  53. map += Wrapper("zeroCool")
  54. val names = map.map { it.name }.toList()
  55. assertEquals(2, names.size)
  56. assertTrue(names.contains("acidBurn"))
  57. assertTrue(names.contains("zeroCool"))
  58. }
  59. @Test
  60. fun `ChannelInsensitiveMap indicates if it contains a value or not`() {
  61. map += Wrapper("acidBurn")
  62. assertTrue("acidBurn" in map)
  63. assertFalse("thePlague" in map)
  64. }
  65. @Test
  66. fun `ChannelInsensitiveMap can be cleared`() {
  67. map += Wrapper("acidBurn")
  68. map += Wrapper("zeroCool")
  69. map.clear()
  70. assertFalse("acidBurn" in map)
  71. assertFalse("zeroCool" in map)
  72. assertEquals(0, map.count())
  73. }
  74. @Test
  75. fun `removeIf removes matching items`() {
  76. map += Wrapper("acidBurn")
  77. map += Wrapper("zeroCool")
  78. map += Wrapper("thePlague")
  79. map.removeIf { it.name.length == 8 }
  80. assertEquals(1, map.count())
  81. assertTrue("thePlague" in map)
  82. }
  83. }
  84. internal class ChannelStateMapTest {
  85. @Test
  86. fun `ChannelStateMap maps channels on name`() {
  87. val channelUserMap = ChannelStateMap { CaseMapping.Rfc }
  88. channelUserMap += ChannelState("#dumpsterDiving") { CaseMapping.Rfc }
  89. assertTrue("#dumpsterDiving" in channelUserMap)
  90. assertTrue("#dumpsterdiving" in channelUserMap)
  91. assertFalse("#thegibson" in channelUserMap)
  92. }
  93. }
  94. internal class ChannelUserMapTest {
  95. @Test
  96. fun `ChannelUserMap maps users on nickname`() {
  97. val channelUserMap = ChannelUserMap { CaseMapping.Rfc }
  98. channelUserMap += ChannelUser("acidBurn")
  99. assertTrue("acidBurn" in channelUserMap)
  100. assertTrue("acidburn" in channelUserMap)
  101. assertFalse("zerocool" in channelUserMap)
  102. }
  103. }
  104. internal class UserMapTest {
  105. @Test
  106. fun `UserMap maps users on nickname`() {
  107. val userMap = UserMap { CaseMapping.Rfc }
  108. userMap += KnownUser({ CaseMapping.Rfc }, User("acidBurn"))
  109. assertTrue("acidBurn" in userMap)
  110. assertTrue("acidburn" in userMap)
  111. assertFalse("zerocool" in userMap)
  112. }
  113. }