From 369769bd7d3eed125d7c89832ec6e882ea39ec1c Mon Sep 17 00:00:00 2001 From: qydysky Date: Sat, 29 Mar 2025 02:16:11 +0800 Subject: [PATCH] 1 (#39) * 1 * 1 --- web/Web.go | 10 ++++- web/Web_test.go | 112 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+), 1 deletion(-) diff --git a/web/Web.go b/web/Web.go index 3b3f36e..bf22f38 100644 --- a/web/Web.go +++ b/web/Web.go @@ -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 { diff --git a/web/Web_test.go b/web/Web_test.go index f2cfb57..cd53ec4 100644 --- a/web/Web_test.go +++ b/web/Web_test.go @@ -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 { -- 2.39.2