github.com/influx6/npkg@v0.8.8/npattrn/pattern_test.go (about)

     1  package npattrn_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	pattern "github.com/influx6/npkg/npattrn"
     7  )
     8  
     9  func TestPriority(t *testing.T) {
    10  	if pattern.CheckPriority(`/admin/id`) != 0 {
    11  		t.Fatal(`/admin/id priority is not 0`)
    12  	}
    13  	if pattern.CheckPriority(`/admin/:id`) != 2 {
    14  		t.Fatal(`/admin/:id priority is not 2`)
    15  	}
    16  
    17  	if pattern.CheckPriority(`/admin/{id:[\d+]}/:name`) != 1 {
    18  		t.Fatal(`/admin/:id priority is not 1`)
    19  	}
    20  }
    21  
    22  func TestEndless(t *testing.T) {
    23  	if !pattern.IsEndless(`/admin/id/*`) {
    24  		t.Fatal(`/admin/id/* is not endless`)
    25  	}
    26  	if pattern.IsEndless(`/admin/id*`) {
    27  		t.Fatal(`/admin/id* is not endless`)
    28  	}
    29  }
    30  
    31  func TestPicker(t *testing.T) {
    32  	if pattern.HasPick(`id`) {
    33  		t.Fatal(`/admin/id has no picker`)
    34  	}
    35  	if !pattern.HasPick(`:id`) {
    36  		t.Fatal(`/admin/:id has picker`)
    37  	}
    38  }
    39  
    40  func TestSpecialChecker(t *testing.T) {
    41  	if !pattern.HasParam(`/admin/{id:[\d+]}`) {
    42  		t.Fatal(`/admin/{id:[\d+]} is special`)
    43  	}
    44  	if pattern.HasParam(`/admin/id`) {
    45  		t.Fatal(`/admin/id is not special`)
    46  	}
    47  	if !pattern.HasParam(`/admin/:id`) {
    48  		t.Fatal(`/admin/:id is special`)
    49  	}
    50  	if pattern.HasKeyParam(`/admin/:id`) {
    51  		t.Fatal(`/admin/:id is special`)
    52  	}
    53  }
    54  
    55  func TestNamePattern(t *testing.T) {
    56  	r := pattern.New(`/name/:id`)
    57  	path := `/name/12`
    58  
    59  	param, _, state := r.Validate(path)
    60  	if !state {
    61  		t.Fatalf("Failed: Should have matched path: %s>%#v Params: %#v", r.Pattern(), path, param)
    62  	}
    63  
    64  	t.Logf("Passed: Should have matched path: %s->%#v Params: %#v", r.Pattern(), path, param)
    65  }
    66  
    67  func TestParam(t *testing.T) {
    68  	r := pattern.New(`:id`)
    69  
    70  	param, _, state := r.Validate(`12`)
    71  	if !state {
    72  		t.Fatalf("Failed: Should have matched path: %s->%#v", r.Pattern(), "/12")
    73  	}
    74  
    75  	val, ok := param["id"]
    76  	if !ok {
    77  		t.Fatalf("Failed: Should have matched with parameter : %s->%s but %#v", "id", "12", param)
    78  	}
    79  
    80  	t.Logf("Passed: Should have matched path: %s->%#v Params: %#v", r.Pattern(), val, param)
    81  }
    82  
    83  func TestEndlessPattern(t *testing.T) {
    84  	r := pattern.New(`/github.com/influx6/*`)
    85  
    86  	param, rem, state := r.Validate(`/github.com/influx6/examples/views#blob`)
    87  	if !state {
    88  		t.Fatalf("Incorrect npattrn: %+s %t", param, state)
    89  	}
    90  
    91  	expected := "/examples/views/#blob"
    92  	if rem != expected {
    93  		t.Fatalf("Incorrect remaining path(Expected: %s Found: %s)", expected, rem)
    94  	}
    95  }
    96  
    97  func TestAsterick(t *testing.T) {
    98  	r := pattern.New(`*`)
    99  
   100  	_, _, state := r.Validate(`/github.com/influx6/examples/views#blob`)
   101  	if !state {
   102  		t.Fatalf("Incorrect npattrn: %t", state)
   103  	}
   104  }
   105  
   106  func TestHashedWithRemainder(t *testing.T) {
   107  	r := pattern.New(`/colors/*`)
   108  
   109  	param, rem, state := r.Validate(`#colors/red`)
   110  	if !state {
   111  		t.Fatalf("incorrect npattrn: %+s %t", param, state)
   112  	}
   113  
   114  	if rem != "/red" {
   115  		t.Fatalf("incorrect remainer: Expected[%s] Got[%s]", "/red", rem)
   116  	}
   117  }
   118  
   119  func TestHashedPatternWithRemainder(t *testing.T) {
   120  	r := pattern.New(`/github.com/influx6/examples/*`)
   121  
   122  	param, rem, state := r.Validate(`/github.com/influx6/examples#views`)
   123  	if !state {
   124  		t.Fatalf("incorrect npattrn: %+s %t", param, state)
   125  	}
   126  
   127  	if rem != "/#views" {
   128  		t.Fatalf("incorrect remainer: Expected[%s] Got[%s]", "#views", rem)
   129  	}
   130  }
   131  
   132  func TestHashedPattern(t *testing.T) {
   133  	r := pattern.New(`/github.com/influx6/examples#views`)
   134  
   135  	param, _, state := r.Validate(`/github.com/influx6/examples/views`)
   136  	if !state {
   137  		t.Fatalf("incorrect npattrn: %+s %t", param, state)
   138  	}
   139  }
   140  
   141  func TestRegExpPattern(t *testing.T) {
   142  	r := pattern.New(`/name/{id:[\d+]}/`)
   143  
   144  	param, _, state := r.Validate(`/name/12/d`)
   145  
   146  	if state {
   147  		t.Fatalf("incorrect npattrn: %+s %t", param, state)
   148  	}
   149  }