]> 127.0.0.1 Git - part/.git/commitdiff
1 (#39) v0.28.20250328181619
authorqydysky <qydysky@foxmail.com>
Fri, 28 Mar 2025 18:16:11 +0000 (02:16 +0800)
committerGitHub <noreply@github.com>
Fri, 28 Mar 2025 18:16:11 +0000 (02:16 +0800)
* 1

* 1

web/Web.go
web/Web_test.go

index 3b3f36e89e47bce3af7f7224845a14a04bd408a3..bf22f387cdf9afa7d693f91e5c0e1245f7ea06c0 100644 (file)
@@ -249,12 +249,20 @@ func (t *WebPath) LoadPerfix(path string) (f func(w http.ResponseWriter, r *http
 
        if key, left, fin := parsePath(path); t.Path == "/" {
                f = t.f
-               if t.Path != key {
+               if t.Path != key { // next
                        if t.Next != nil {
                                if f1, ok := t.Next.LoadPerfix(path); ok {
                                        f = f1
                                }
                        }
+               } else { // same
+                       if !fin {
+                               if t.Same != nil {
+                                       if f1, ok := t.Same.LoadPerfix(left); ok {
+                                               f = f1
+                                       }
+                               }
+                       }
                }
                return f, f != nil
        } else if t.Path == key {
index f2cfb574f58edbe5b2e4df3623cc09e22b58ccd0..cd53ec4dc8b67f45c11f1d42a0ffa61b227e93c2 100644 (file)
@@ -135,6 +135,118 @@ func Test_Server(t *testing.T) {
        }
 }
 
+func Test_double(t *testing.T) {
+       ch := make(chan int, 10)
+       webpath := &WebPath{}
+       webpath.Store(`/`, func(w http.ResponseWriter, _ *http.Request) {
+               ch <- 0
+       })
+       webpath.Store(`//`, func(w http.ResponseWriter, _ *http.Request) {
+               ch <- 1
+       })
+       webpath.Store(`//1`, func(w http.ResponseWriter, _ *http.Request) {
+               ch <- 2
+       })
+       webpath.Store(`//1/`, func(w http.ResponseWriter, _ *http.Request) {
+               ch <- 3
+       })
+       data, _ := json.Marshal(webpath)
+       fmt.Println(string(data))
+       if f, ok := webpath.LoadPerfix(`//`); !ok {
+               t.Fatal()
+       } else {
+               f(nil, nil)
+       }
+       if f, ok := webpath.LoadPerfix(`//2`); !ok {
+               t.Fatal()
+       } else {
+               f(nil, nil)
+       }
+       if f, ok := webpath.LoadPerfix(`//1`); !ok {
+               t.Fatal()
+       } else {
+               f(nil, nil)
+       }
+       if f, ok := webpath.LoadPerfix(`//1/`); !ok {
+               t.Fatal()
+       } else {
+               f(nil, nil)
+       }
+       if <-ch != 1 {
+               t.Fatal()
+       }
+       if <-ch != 1 {
+               t.Fatal()
+       }
+       if i := <-ch; i != 2 {
+               t.Fatal(i)
+       }
+       if <-ch != 3 {
+               t.Fatal()
+       }
+
+       if f, ok := webpath.Load(`//`); !ok {
+               t.Fatal()
+       } else {
+               f(nil, nil)
+       }
+       if _, ok := webpath.Load(`//2`); ok {
+               t.Fatal()
+       }
+       if f, ok := webpath.Load(`//1`); !ok {
+               t.Fatal()
+       } else {
+               f(nil, nil)
+       }
+       if f, ok := webpath.Load(`//1/`); !ok {
+               t.Fatal()
+       } else {
+               f(nil, nil)
+       }
+       if <-ch != 1 {
+               t.Fatal()
+       }
+       if i := <-ch; i != 2 {
+               t.Fatal(i)
+       }
+       if <-ch != 3 {
+               t.Fatal()
+       }
+
+       if f, ok := webpath.LoadOnePerfix(`//`); !ok {
+               t.Fatal()
+       } else {
+               f(nil, nil)
+       }
+       if f, ok := webpath.LoadOnePerfix(`//1`); !ok {
+               t.Fatal()
+       } else {
+               f(nil, nil)
+       }
+       if f, ok := webpath.LoadOnePerfix(`//2`); !ok {
+               t.Fatal()
+       } else {
+               f(nil, nil)
+       }
+       if f, ok := webpath.LoadOnePerfix(`//1/`); !ok {
+               t.Fatal()
+       } else {
+               f(nil, nil)
+       }
+       if <-ch != 1 {
+               t.Fatal()
+       }
+       if i := <-ch; i != 2 {
+               t.Fatal(i)
+       }
+       if <-ch != 1 {
+               t.Fatal()
+       }
+       if <-ch != 3 {
+               t.Fatal()
+       }
+}
+
 func failIfNot[T comparable](t *testing.T, a, b T) {
        t.Logf("a:'%v' b:'%v'", a, b)
        if a != b {