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 2.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // Copyright (c) 2017 Daniel Oaks
  2. // released under the MIT license
  3. package irc
  4. import (
  5. "reflect"
  6. "testing"
  7. "github.com/ergochat/ergo/irc/modes"
  8. )
  9. func TestParseDefaultChannelModes(t *testing.T) {
  10. nt := "+nt"
  11. n := "+n"
  12. empty := ""
  13. tminusi := "+t -i"
  14. var parseTests = []struct {
  15. raw *string
  16. expected modes.Modes
  17. }{
  18. {&nt, modes.Modes{modes.NoOutside, modes.OpOnlyTopic}},
  19. {&n, modes.Modes{modes.NoOutside}},
  20. {&empty, modes.Modes{}},
  21. {&tminusi, modes.Modes{modes.OpOnlyTopic}},
  22. {nil, modes.Modes{modes.NoOutside, modes.OpOnlyTopic}},
  23. }
  24. for _, testcase := range parseTests {
  25. result := ParseDefaultChannelModes(testcase.raw)
  26. if !reflect.DeepEqual(result, testcase.expected) {
  27. t.Errorf("expected modes %s, got %s", testcase.expected, result)
  28. }
  29. }
  30. }
  31. func TestParseDefaultUserModes(t *testing.T) {
  32. iR := "+iR"
  33. i := "+i"
  34. empty := ""
  35. rminusi := "+R -i"
  36. var parseTests = []struct {
  37. raw *string
  38. expected modes.Modes
  39. }{
  40. {&iR, modes.Modes{modes.Invisible, modes.RegisteredOnly}},
  41. {&i, modes.Modes{modes.Invisible}},
  42. {&empty, modes.Modes{}},
  43. {&rminusi, modes.Modes{modes.RegisteredOnly}},
  44. {nil, modes.Modes{}},
  45. }
  46. for _, testcase := range parseTests {
  47. result := ParseDefaultUserModes(testcase.raw)
  48. if !reflect.DeepEqual(result, testcase.expected) {
  49. t.Errorf("expected modes %s, got %s", testcase.expected, result)
  50. }
  51. }
  52. }
  53. func TestUmodeGreaterThan(t *testing.T) {
  54. if !umodeGreaterThan(modes.Halfop, modes.Voice) {
  55. t.Errorf("expected Halfop > Voice")
  56. }
  57. if !umodeGreaterThan(modes.Voice, modes.Mode(0)) {
  58. t.Errorf("expected Voice > 0 (the zero value of modes.Mode)")
  59. }
  60. if umodeGreaterThan(modes.ChannelAdmin, modes.ChannelAdmin) {
  61. t.Errorf("modes should not be greater than themselves")
  62. }
  63. }
  64. func assertEqual(supplied, expected interface{}, t *testing.T) {
  65. if !reflect.DeepEqual(supplied, expected) {
  66. t.Errorf("expected %v but got %v", expected, supplied)
  67. }
  68. }
  69. func TestChannelUserModeHasPrivsOver(t *testing.T) {
  70. assertEqual(channelUserModeHasPrivsOver(modes.Voice, modes.Halfop), false, t)
  71. assertEqual(channelUserModeHasPrivsOver(modes.Mode(0), modes.Halfop), false, t)
  72. assertEqual(channelUserModeHasPrivsOver(modes.Voice, modes.Mode(0)), false, t)
  73. assertEqual(channelUserModeHasPrivsOver(modes.ChannelAdmin, modes.ChannelAdmin), false, t)
  74. assertEqual(channelUserModeHasPrivsOver(modes.Halfop, modes.Halfop), false, t)
  75. assertEqual(channelUserModeHasPrivsOver(modes.Voice, modes.Voice), false, t)
  76. assertEqual(channelUserModeHasPrivsOver(modes.Halfop, modes.Voice), true, t)
  77. assertEqual(channelUserModeHasPrivsOver(modes.ChannelFounder, modes.ChannelAdmin), true, t)
  78. assertEqual(channelUserModeHasPrivsOver(modes.ChannelOperator, modes.ChannelOperator), true, t)
  79. }