- 测试 ~ 修饰符大小写敏感匹配 - 测试 ~* 修饰符大小写不敏感匹配 - 测试 ^~ 修饰符非正则前缀优先匹配 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
61 lines
1.6 KiB
Go
61 lines
1.6 KiB
Go
package integration
|
||
|
||
import (
|
||
"testing"
|
||
|
||
"github.com/valyala/fasthttp"
|
||
"rua.plus/lolly/internal/matcher"
|
||
)
|
||
|
||
func TestRegexConfigCaseSensitive(t *testing.T) {
|
||
// 测试 ~ 修饰符(case-sensitive)
|
||
// 创建 regex matcher,验证只匹配小写
|
||
m, err := matcher.NewRegexMatcher(`\.php$`, nil, 3, false)
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
if !m.Match("/test.php") {
|
||
t.Error("~ modifier should match lowercase .php")
|
||
}
|
||
if m.Match("/test.PHP") {
|
||
t.Error("~ modifier should NOT match uppercase .PHP")
|
||
}
|
||
}
|
||
|
||
func TestRegexConfigCaseInsensitive(t *testing.T) {
|
||
// 测试 ~* 修饰符(case-insensitive)
|
||
m, err := matcher.NewRegexMatcher(`(?i)\.php$`, nil, 3, true)
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
if !m.Match("/test.php") {
|
||
t.Error("~* modifier should match lowercase .php")
|
||
}
|
||
if !m.Match("/test.PHP") {
|
||
t.Error("~* modifier should match uppercase .PHP")
|
||
}
|
||
}
|
||
|
||
func TestPrefixPriorityNotRegex(t *testing.T) {
|
||
// 测试 ^~ 修饰符(非正则)
|
||
// 需要提供非 nil handler,否则 RadixTree 不会存储该节点
|
||
dummyHandler := func(ctx *fasthttp.RequestCtx) {}
|
||
|
||
engine := matcher.NewLocationEngine()
|
||
err := engine.AddPrefixPriority("/images", dummyHandler)
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
|
||
result := engine.Match("/images/logo.png")
|
||
if result == nil {
|
||
t.Error("^~ should match prefix")
|
||
}
|
||
if result.LocationType == matcher.LocationTypeRegex || result.LocationType == matcher.LocationTypeRegexCaseless {
|
||
t.Error("^~ should NOT be treated as regex")
|
||
}
|
||
if result.LocationType != matcher.LocationTypePrefixPriority {
|
||
t.Errorf("^~ should have LocationTypePrefixPriority, got: %s", result.LocationType)
|
||
}
|
||
}
|