Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

modes_test.go 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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. modes, unknown = ParseChannelModeChanges("+b")
  46. if len(unknown) > 0 {
  47. t.Errorf("unexpected unknown mode change: %v", unknown)
  48. }
  49. // +b with no argument becomes a list operation
  50. expectedChanges := ModeChanges{{
  51. Op: List,
  52. Mode: BanMask,
  53. }}
  54. if !reflect.DeepEqual(modes, expectedChanges) {
  55. t.Errorf("unexpected mode change: %v instead of %v", modes, expectedChanges)
  56. }
  57. }
  58. func TestSetMode(t *testing.T) {
  59. set := NewModeSet()
  60. if applied := set.SetMode(Invisible, false); applied != false {
  61. t.Errorf("all modes should be false by default")
  62. }
  63. if applied := set.SetMode(Invisible, true); applied != true {
  64. t.Errorf("initial SetMode call should return true")
  65. }
  66. set.SetMode(Operator, true)
  67. if applied := set.SetMode(Invisible, true); applied != false {
  68. t.Errorf("redundant SetMode call should return false")
  69. }
  70. expected1 := []Mode{Invisible, Operator}
  71. expected2 := []Mode{Operator, Invisible}
  72. if allModes := set.AllModes(); !(reflect.DeepEqual(allModes, expected1) || reflect.DeepEqual(allModes, expected2)) {
  73. t.Errorf("unexpected AllModes value: %v", allModes)
  74. }
  75. if modeString := set.String(); !(modeString == "io" || modeString == "oi") {
  76. t.Errorf("unexpected modestring: %s", modeString)
  77. }
  78. }
  79. func TestModeString(t *testing.T) {
  80. set := NewModeSet()
  81. set.SetMode('A', true)
  82. set.SetMode('z', true)
  83. if modeString := set.String(); !(modeString == "Az" || modeString == "Za") {
  84. t.Errorf("unexpected modestring: %s", modeString)
  85. }
  86. }
  87. func TestNilReceivers(t *testing.T) {
  88. set := NewModeSet()
  89. set = nil
  90. if set.HasMode(Invisible) {
  91. t.Errorf("nil ModeSet should not have any modes")
  92. }
  93. str := set.String()
  94. if str != "" {
  95. t.Errorf("nil Modeset should have empty String(), got %v instead", str)
  96. }
  97. }
  98. func TestHighestChannelUserMode(t *testing.T) {
  99. set := NewModeSet()
  100. if set.HighestChannelUserMode() != Mode(0) {
  101. t.Errorf("no channel user modes should be present yet")
  102. }
  103. set.SetMode(Voice, true)
  104. if set.HighestChannelUserMode() != Voice {
  105. t.Errorf("should see that user is voiced")
  106. }
  107. set.SetMode(ChannelAdmin, true)
  108. if set.HighestChannelUserMode() != ChannelAdmin {
  109. t.Errorf("should see that user has channel admin")
  110. }
  111. set = nil
  112. if set.HighestChannelUserMode() != Mode(0) {
  113. t.Errorf("nil modeset should have the zero mode as highest channel-user mode")
  114. }
  115. }
  116. func BenchmarkModeString(b *testing.B) {
  117. set := NewModeSet()
  118. set.SetMode('A', true)
  119. set.SetMode('N', true)
  120. set.SetMode('b', true)
  121. set.SetMode('i', true)
  122. set.SetMode('x', true)
  123. b.ResetTimer()
  124. for i := 0; i < b.N; i++ {
  125. _ = set.String()
  126. }
  127. }