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.

modes_test.go 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. // Copyright (c) 2018 Shivaram Lingamneni
  2. // released under the MIT license
  3. package modes
  4. import (
  5. "reflect"
  6. "testing"
  7. )
  8. func TestParseChannelModeChanges(t *testing.T) {
  9. modes, unknown := ParseChannelModeChanges("+h", "wrmsr")
  10. if len(unknown) > 0 {
  11. t.Errorf("unexpected unknown mode change: %v", unknown)
  12. }
  13. expected := ModeChange{
  14. Op: Add,
  15. Mode: Halfop,
  16. Arg: "wrmsr",
  17. }
  18. if len(modes) != 1 || modes[0] != expected {
  19. t.Errorf("unexpected mode change: %v", modes)
  20. }
  21. modes, unknown = ParseChannelModeChanges("-v", "shivaram")
  22. if len(unknown) > 0 {
  23. t.Errorf("unexpected unknown mode change: %v", unknown)
  24. }
  25. expected = ModeChange{
  26. Op: Remove,
  27. Mode: Voice,
  28. Arg: "shivaram",
  29. }
  30. if len(modes) != 1 || modes[0] != expected {
  31. t.Errorf("unexpected mode change: %v", modes)
  32. }
  33. modes, unknown = ParseChannelModeChanges("+tx")
  34. if len(unknown) != 1 || !unknown['x'] {
  35. t.Errorf("expected that x is an unknown mode, instead: %v", unknown)
  36. }
  37. expected = ModeChange{
  38. Op: Add,
  39. Mode: OpOnlyTopic,
  40. Arg: "",
  41. }
  42. if len(modes) != 1 || modes[0] != expected {
  43. t.Errorf("unexpected mode change: %v", modes)
  44. }
  45. }
  46. func TestSetMode(t *testing.T) {
  47. set := NewModeSet()
  48. if applied := set.SetMode(Invisible, false); applied != false {
  49. t.Errorf("all modes should be false by default")
  50. }
  51. if applied := set.SetMode(Invisible, true); applied != true {
  52. t.Errorf("initial SetMode call should return true")
  53. }
  54. set.SetMode(Operator, true)
  55. if applied := set.SetMode(Invisible, true); applied != false {
  56. t.Errorf("redundant SetMode call should return false")
  57. }
  58. expected1 := []Mode{Invisible, Operator}
  59. expected2 := []Mode{Operator, Invisible}
  60. if allModes := set.AllModes(); !(reflect.DeepEqual(allModes, expected1) || reflect.DeepEqual(allModes, expected2)) {
  61. t.Errorf("unexpected AllModes value: %v", allModes)
  62. }
  63. if modeString := set.String(); !(modeString == "io" || modeString == "oi") {
  64. t.Errorf("unexpected modestring: %s", modeString)
  65. }
  66. }
  67. func TestModeString(t *testing.T) {
  68. set := NewModeSet()
  69. set.SetMode('A', true)
  70. set.SetMode('z', true)
  71. if modeString := set.String(); !(modeString == "Az" || modeString == "Za") {
  72. t.Errorf("unexpected modestring: %s", modeString)
  73. }
  74. }
  75. func TestNilReceivers(t *testing.T) {
  76. set := NewModeSet()
  77. set = nil
  78. if set.HasMode(Invisible) {
  79. t.Errorf("nil ModeSet should not have any modes")
  80. }
  81. str := set.String()
  82. if str != "" {
  83. t.Errorf("nil Modeset should have empty String(), got %v instead", str)
  84. }
  85. }
  86. func TestHighestChannelUserMode(t *testing.T) {
  87. set := NewModeSet()
  88. if set.HighestChannelUserMode() != Mode(0) {
  89. t.Errorf("no channel user modes should be present yet")
  90. }
  91. set.SetMode(Voice, true)
  92. if set.HighestChannelUserMode() != Voice {
  93. t.Errorf("should see that user is voiced")
  94. }
  95. set.SetMode(ChannelAdmin, true)
  96. if set.HighestChannelUserMode() != ChannelAdmin {
  97. t.Errorf("should see that user has channel admin")
  98. }
  99. set = nil
  100. if set.HighestChannelUserMode() != Mode(0) {
  101. t.Errorf("nil modeset should have the zero mode as highest channel-user mode")
  102. }
  103. }
  104. func BenchmarkModeString(b *testing.B) {
  105. set := NewModeSet()
  106. set.SetMode('A', true)
  107. set.SetMode('N', true)
  108. set.SetMode('b', true)
  109. set.SetMode('i', true)
  110. set.SetMode('x', true)
  111. b.ResetTimer()
  112. for i := 0; i < b.N; i++ {
  113. _ = set.String()
  114. }
  115. }