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.

whowas_test.go 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. // Copyright (c) 2018 Shivaram Lingamneni <slingamn@cs.stanford.edu>
  2. // released under the MIT license
  3. package irc
  4. import (
  5. "testing"
  6. )
  7. func makeTestWhowas(nick string) WhoWas {
  8. cfnick, err := CasefoldName(nick)
  9. if err != nil {
  10. panic(err)
  11. }
  12. return WhoWas{
  13. nicknameCasefolded: cfnick,
  14. nickname: nick,
  15. username: "user",
  16. hostname: "oragono.io",
  17. realname: "Real Name",
  18. }
  19. }
  20. func TestWhoWas(t *testing.T) {
  21. var results []WhoWas
  22. wwl := NewWhoWasList(3)
  23. // test Find on empty list
  24. results = wwl.Find("nobody", 10)
  25. if len(results) != 0 {
  26. t.Fatalf("incorrect whowas results: %v", results)
  27. }
  28. wwl.Append(makeTestWhowas("dan-"))
  29. results = wwl.Find("nobody", 10)
  30. if len(results) != 0 {
  31. t.Fatalf("incorrect whowas results: %v", results)
  32. }
  33. results = wwl.Find("dan-", 10)
  34. if len(results) != 1 || results[0].nickname != "dan-" {
  35. t.Fatalf("incorrect whowas results: %v", results)
  36. }
  37. wwl.Append(makeTestWhowas("slingamn"))
  38. results = wwl.Find("slingamN", 10)
  39. if len(results) != 1 || results[0].nickname != "slingamn" {
  40. t.Fatalf("incorrect whowas results: %v", results)
  41. }
  42. wwl.Append(makeTestWhowas("Dan-"))
  43. results = wwl.Find("dan-", 10)
  44. // reverse chronological order
  45. if len(results) != 2 || results[0].nickname != "Dan-" || results[1].nickname != "dan-" {
  46. t.Fatalf("incorrect whowas results: %v", results)
  47. }
  48. // 0 means no limit
  49. results = wwl.Find("dan-", 0)
  50. if len(results) != 2 || results[0].nickname != "Dan-" || results[1].nickname != "dan-" {
  51. t.Fatalf("incorrect whowas results: %v", results)
  52. }
  53. // a limit of 1 should return the most recent entry only
  54. results = wwl.Find("dan-", 1)
  55. if len(results) != 1 || results[0].nickname != "Dan-" {
  56. t.Fatalf("incorrect whowas results: %v", results)
  57. }
  58. wwl.Append(makeTestWhowas("moocow"))
  59. results = wwl.Find("moocow", 10)
  60. if len(results) != 1 || results[0].nickname != "moocow" {
  61. t.Fatalf("incorrect whowas results: %v", results)
  62. }
  63. results = wwl.Find("dan-", 10)
  64. // should have overwritten the original entry, leaving the second
  65. if len(results) != 1 || results[0].nickname != "Dan-" {
  66. t.Fatalf("incorrect whowas results: %v", results)
  67. }
  68. // overwrite the second entry
  69. wwl.Append(makeTestWhowas("enckse"))
  70. results = wwl.Find("enckse", 10)
  71. if len(results) != 1 || results[0].nickname != "enckse" {
  72. t.Fatalf("incorrect whowas results: %v", results)
  73. }
  74. results = wwl.Find("slingamn", 10)
  75. if len(results) != 0 {
  76. t.Fatalf("incorrect whowas results: %v", results)
  77. }
  78. }
  79. func TestEmptyWhoWas(t *testing.T) {
  80. // stupid edge case; setting an empty whowas buffer should not panic
  81. wwl := NewWhoWasList(0)
  82. results := wwl.Find("slingamn", 10)
  83. if len(results) != 0 {
  84. t.Fatalf("incorrect whowas results: %v", results)
  85. }
  86. wwl.Append(makeTestWhowas("slingamn"))
  87. results = wwl.Find("slingamn", 10)
  88. if len(results) != 0 {
  89. t.Fatalf("incorrect whowas results: %v", results)
  90. }
  91. }