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.

CaseMappingTest.kt 2.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package com.dmdirc.ktirc.io
  2. import org.junit.jupiter.api.Assertions.*
  3. import org.junit.jupiter.api.Test
  4. internal class CaseMappingTest {
  5. @Test
  6. fun `Equal unicode strings are equivalent regardless of case mapping`() {
  7. val unicode = "\uD83D\uDC69\u200D\uD83C\uDF73 \uD83D\uDC68\u200D\uD83C\uDF73 \uD83D\uDC69\u200D\uD83C\uDF93 \uD83D\uDC68\u200D\uD83C\uDF93"
  8. assertTrue(CaseMapping.Ascii.areEquivalent(unicode, unicode))
  9. assertTrue(CaseMapping.Rfc.areEquivalent(unicode, unicode))
  10. assertTrue(CaseMapping.RfcStrict.areEquivalent(unicode, unicode))
  11. }
  12. @Test
  13. fun `Different length strings are always not equivalent`() {
  14. val left = "abc"
  15. val right = "ABC "
  16. assertFalse(CaseMapping.Ascii.areEquivalent(left, right))
  17. assertFalse(CaseMapping.Rfc.areEquivalent(left, right))
  18. assertFalse(CaseMapping.RfcStrict.areEquivalent(left, right))
  19. }
  20. @Test
  21. fun `ASCII characters are equivalent for all mappings`() {
  22. val left = "the Quick Brown fox Jumps over the lazy dog"
  23. val right = "THE qUICK bROWN fox jUMPS OVER THE LAZY DOG"
  24. assertTrue(CaseMapping.Ascii.areEquivalent(left, right))
  25. assertTrue(CaseMapping.Rfc.areEquivalent(left, right))
  26. assertTrue(CaseMapping.RfcStrict.areEquivalent(left, right))
  27. }
  28. @Test
  29. fun `RFC characters are equivalent for RFC mappings not ASCII`() {
  30. val left = "[Hello\\There}"
  31. val right = "{Hello|There]"
  32. assertFalse(CaseMapping.Ascii.areEquivalent(left, right))
  33. assertTrue(CaseMapping.Rfc.areEquivalent(left, right))
  34. assertTrue(CaseMapping.RfcStrict.areEquivalent(left, right))
  35. }
  36. @Test
  37. fun `Tilde and caret are equivalent only for RFC mapping`() {
  38. val left = "~~^~~"
  39. val right = "~^^^^"
  40. assertFalse(CaseMapping.Ascii.areEquivalent(left, right))
  41. assertTrue(CaseMapping.Rfc.areEquivalent(left, right))
  42. assertFalse(CaseMapping.RfcStrict.areEquivalent(left, right))
  43. }
  44. @Test
  45. fun `FromName returns matching mapping`() {
  46. assertEquals(CaseMapping.Ascii, CaseMapping.fromName("ascii"))
  47. assertEquals(CaseMapping.Ascii, CaseMapping.fromName("Ascii"))
  48. assertEquals(CaseMapping.Rfc, CaseMapping.fromName("rfc1459"))
  49. assertEquals(CaseMapping.Rfc, CaseMapping.fromName("RFC1459"))
  50. assertEquals(CaseMapping.RfcStrict, CaseMapping.fromName("rfc1459-strict"))
  51. assertEquals(CaseMapping.RfcStrict, CaseMapping.fromName("Rfc1459-Strict"))
  52. }
  53. @Test
  54. fun `FromName falls back to RFC`() {
  55. assertEquals(CaseMapping.Rfc, CaseMapping.fromName(""))
  56. assertEquals(CaseMapping.Rfc, CaseMapping.fromName("foo"))
  57. }
  58. }