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