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 }