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 }