返回 DeepSeek-Reasonix
sqliteuri_test.go
根目录 / internal / sqliteuri / sqliteuri_test.go
1 package sqliteuri
2
3 import (
4 "net/url"
5 "path/filepath"
6 "strings"
7 "testing"
8 )
9
10 func TestDiskUsesAbsoluteEncodedPathAndSeparateQuery(t *testing.T) {
11 query := url.Values{"mode": {"ro"}, "_pragma": {"busy_timeout(5000)", "foreign_keys(1)"}}
12 dsn, err := Disk(filepath.Join("relative dir", "会话%23#.sqlite"), query)
13 if err != nil {
14 t.Fatal(err)
15 }
16 u, err := url.Parse(dsn)
17 if err != nil {
18 t.Fatal(err)
19 }
20 wantSuffix := filepath.ToSlash(filepath.Join("relative dir", "会话%23#.sqlite"))
21 if !strings.HasSuffix(u.Path, wantSuffix) || !strings.HasPrefix(u.Path, "/") {
22 t.Fatalf("decoded path = %q, want absolute suffix %q", u.Path, wantSuffix)
23 }
24 if u.Query().Get("mode") != "ro" || len(u.Query()["_pragma"]) != 2 {
25 t.Fatalf("query = %#v", u.Query())
26 }
27 if strings.Contains(strings.SplitN(dsn, "?", 2)[0], "#") || !strings.Contains(dsn, "%25") || !strings.Contains(dsn, "%23") {
28 t.Fatalf("path is not URI encoded: %s", dsn)
29 }
30 }
31
32 func TestDiskRejectsBlankPath(t *testing.T) {
33 if _, err := Disk(" \t", nil); err == nil {
34 t.Fatal("Disk accepted a blank path")
35 }
36 }
37
38 func TestDiskWindowsDriveAndUNCForms(t *testing.T) {
39 tests := []struct {
40 name string
41 path string
42 want string
43 }{
44 {name: "forward drive", path: `C:/Users/Test User/会话%23#.sqlite`, want: `file:///C:/Users/Test%20User/%E4%BC%9A%E8%AF%9D%2523%23.sqlite`},
45 {name: "backslash drive", path: `C:\Users\Test User\data.sqlite`, want: `file:///C:/Users/Test%20User/data.sqlite`},
46 {name: "UNC", path: `\\server\share\Test User\data.sqlite`, want: `file:////server/share/Test%20User/data.sqlite`},
47 }
48 for _, tt := range tests {
49 t.Run(tt.name, func(t *testing.T) {
50 if got := disk(tt.path, nil, "windows"); got != tt.want {
51 t.Fatalf("disk() = %q, want %q", got, tt.want)
52 }
53 })
54 }
55 }
56
56 lines GO