github.com/sohaha/zlsgo@v1.7.13-0.20240501141223-10dd1a906f76/znet/utils_test.go (about)

     1  package znet
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/sohaha/zlsgo"
     7  )
     8  
     9  func TestCompletionPath(t *testing.T) {
    10  	tt := zlsgo.NewTest(t)
    11  
    12  	tt.Equal("/", Utils.CompletionPath("/", "/"))
    13  	tt.Equal("/", Utils.CompletionPath("//", "///"))
    14  	tt.Equal("/", Utils.CompletionPath("", "/"))
    15  	tt.Equal("/", Utils.CompletionPath(" ", "/"))
    16  	tt.Equal("/a", Utils.CompletionPath("a", "/"))
    17  	tt.Equal("/a", Utils.CompletionPath("/a ", "/"))
    18  	tt.Equal("/a/", Utils.CompletionPath("/a/", "/"))
    19  	tt.Equal("/a b", Utils.CompletionPath("a b  ", "/"))
    20  	tt.Equal("/a b/", Utils.CompletionPath("a b/", "/"))
    21  	tt.Equal("/d/:id", Utils.CompletionPath(":id", "/d//"))
    22  	tt.Equal("/d/:id", Utils.CompletionPath(":id", "d/////"))
    23  	tt.Equal("/g", Utils.CompletionPath("", "/g"))
    24  	tt.Equal("/g/", Utils.CompletionPath("/", "/g"))
    25  	tt.Equal("/xxx/{name:[\\w\\d-]+}.{ext:[\\w]+}", Utils.CompletionPath("xxx/{name:[\\w\\d-]+}.{ext:[\\w]+}", "/"))
    26  	tt.Equal("/aaa/xxx/{name:[\\w\\d-]+}.{ext:[\\w]+}", Utils.CompletionPath("xxx/{name:[\\w\\d-]+}.{ext:[\\w]+}", "aaa"))
    27  }
    28  
    29  func TestURLMatchAndParse(t *testing.T) {
    30  	tt := zlsgo.NewTest(t)
    31  
    32  	match, ok := Utils.URLMatchAndParse("/", "/")
    33  	t.Log(match)
    34  	tt.EqualTrue(!ok)
    35  	tt.Equal(0, len(match))
    36  
    37  	match, ok = Utils.URLMatchAndParse("/123", "/:id")
    38  	t.Log(match)
    39  	tt.EqualTrue(ok)
    40  	tt.Equal(1, len(match))
    41  
    42  	match, ok = Utils.URLMatchAndParse("/hi/1.1/123", "/:name/:code/:id")
    43  	t.Log(match)
    44  	tt.EqualTrue(ok)
    45  	tt.Equal(3, len(match))
    46  
    47  	match, ok = Utils.URLMatchAndParse("/aaa/hi", "/:name/:*")
    48  	t.Log(match)
    49  	tt.EqualTrue(ok)
    50  	tt.Equal(2, len(match))
    51  
    52  }
    53  
    54  func Test_parsPattern(t *testing.T) {
    55  	tt := zlsgo.NewTest(t)
    56  
    57  	p, s := parsePattern([]string{`{name:[\w\p\-]+}.{ext:[\w]+}`}, "")
    58  	tt.Log(p, s)
    59  	tt.EqualExit(`([\w\p\-]+).([\w]+)`, p)
    60  	tt.EqualExit([]string{"name", "ext"}, s)
    61  
    62  	p, s = parsePattern([]string{"{name:[\\w\\d-]+}"}, "")
    63  	tt.Log(p, s)
    64  	tt.EqualExit("([\\w\\d-]+)", p)
    65  	tt.EqualExit([]string{"name"}, s)
    66  
    67  	p, s = parsePattern([]string{":name", ":id"}, "/")
    68  	tt.Log(p, s)
    69  	tt.EqualExit("/([^\\/]+)/([\\d]+)", p)
    70  	tt.EqualExit([]string{"name", "id"}, s)
    71  
    72  	p, s = parsePattern([]string{"{p:[\\w\\d-]+}.pth"}, "")
    73  	tt.Log(p, s)
    74  	tt.EqualExit("([\\w\\d-]+).pth", p)
    75  	tt.EqualExit([]string{"p"}, s)
    76  
    77  	p, s = parsePattern([]string{`{key:[^\/.]+}.{ext:[^/.]+}`}, "")
    78  	tt.Log(p, s)
    79  	tt.EqualExit(`([^\/.]+).([^/.]+)`, p)
    80  	tt.EqualExit([]string{"key", "ext"}, s)
    81  
    82  	p, s = parsePattern([]string{"{name:[^\\", ".]+}"}, "")
    83  	tt.Log(p, s)
    84  	tt.EqualExit("([^/.]+)", p)
    85  	tt.EqualExit([]string{"name"}, s)
    86  
    87  	p, s = parsePattern([]string{`xxx-(?P<name>[\w\p{Han}\-]+).(?P<ext>[a-zA-Z]+)`}, "")
    88  	tt.Log(p, s)
    89  	tt.EqualExit("xxx-(?P<name>[\\w\\p{Han}\\-]+).(?P<ext>[a-zA-Z]+)", p)
    90  	tt.EqualExit([]string{"name", "ext"}, s)
    91  }