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  }