github.com/hvlck/robots@v0.0.0-20220808231330-f74d5a434efc/main_test.go (about) 1 package robots 2 3 import ( 4 "bufio" 5 "os" 6 "testing" 7 ) 8 9 // benchmarks the IsAllowed function 10 func BenchmarkIsAllowed(b *testing.B) { 11 b.StopTimer() 12 13 s, err := useOne() 14 if err != nil { 15 b.Log(err) 16 b.Fail() 17 } 18 19 b.StartTimer() 20 priv := s.IsAllowed("/private/", "*") 21 if priv != false { 22 b.Fail() 23 } 24 } 25 26 // internal, loads a robots.txt file for use 27 func useOne() (RobotList, error) { 28 f, err := os.Open("./examples/t.txt") 29 if err != nil { 30 return RobotList{}, err 31 } 32 33 b := bufio.NewReader(f) 34 s, err := Parse(b) 35 if err != nil { 36 return RobotList{}, err 37 } 38 return s, nil 39 } 40 41 // tests whether the IsAllowed function properly determines match strings 42 func TestIsAllowed(t *testing.T) { 43 s, err := useOne() 44 if err != nil { 45 t.Log(err) 46 t.Fail() 47 } 48 49 priv := s.IsAllowed("/private/", "*") 50 user := s.IsAllowed("/user/hvlck", "*") 51 if !(!priv && user) { 52 t.Fail() 53 } 54 } 55 56 // tests whether the parse function successfully parses a robots.txt file 57 func TestParse(t *testing.T) { 58 s, err := useOne() 59 if err != nil { 60 t.Log(err) 61 t.Fail() 62 } 63 64 proper := RobotList{ 65 robots: map[string]Robot{ 66 "*": { 67 Allowed: map[string]bool{ 68 "/user/*": true, 69 "/private/": false, 70 }, 71 }, 72 }, 73 sitemaps: []string{"https://example.com/"}, 74 } 75 76 for k := range proper.robots { 77 if ent, ok := proper.robots[k]; ok { 78 for kk, vv := range ent.Allowed { 79 if s.robots[k].Allowed[kk] != vv { 80 t.Fail() 81 } 82 } 83 } 84 } 85 86 for i, v := range proper.sitemaps { 87 if s.sitemaps[i] != v { 88 t.Fail() 89 } 90 } 91 }