test(integration): 添加正则 location 配置集成测试

- 测试 ~ 修饰符大小写敏感匹配
- 测试 ~* 修饰符大小写不敏感匹配
- 测试 ^~ 修饰符非正则前缀优先匹配

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
xfy 2026-04-20 16:04:36 +08:00
parent 4b6bc056bc
commit b0ca037cad

View File

@ -0,0 +1,60 @@
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)
}
}