learnlytics-go/templ/lsp/uri/uri_test.go
2025-03-20 12:35:13 +01:00

143 lines
3.1 KiB
Go

// Copyright 2019 The Go Language Server Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package uri
import (
"testing"
"github.com/google/go-cmp/cmp"
)
func TestFile(t *testing.T) {
tests := []struct {
name string
path string
want URI
wantErr bool
}{
{
name: "ValidFileScheme",
path: "/users/me/c#-projects/",
want: URI(FileScheme + hierPart + "/users/me/c%23-projects"),
wantErr: false,
},
{
name: "Invalid",
path: "users-me-c#-projects",
want: URI(""),
wantErr: true,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if diff := cmp.Diff(File(tt.path), tt.want); (diff != "") != tt.wantErr {
t.Errorf("%s: (-got, +want)\n%s", tt.name, diff)
}
})
}
}
func TestParse(t *testing.T) {
tests := []struct {
name string
s string
want URI
}{
{
name: "ValidFileScheme",
s: "file://code.visualstudio.com/docs/extensions/overview.md",
want: URI(FileScheme + hierPart + "/docs/extensions/overview.md"),
},
{
name: "ValidHTTPScheme",
s: "http://code.visualstudio.com/docs/extensions/overview#frag",
want: URI(HTTPScheme + hierPart + "code.visualstudio.com/docs/extensions/overview#frag"),
},
{
name: "ValidHTTPSScheme",
s: "https://code.visualstudio.com/docs/extensions/overview#frag",
want: URI(HTTPSScheme + hierPart + "code.visualstudio.com/docs/extensions/overview#frag"),
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
got, err := Parse(tt.s)
if err != nil {
t.Error(err)
return
}
if diff := cmp.Diff(got, tt.want); diff != "" {
t.Errorf("%s: (-got, +want)\n%s", tt.name, diff)
}
})
}
}
func TestFrom(t *testing.T) {
type args struct {
scheme string
authority string
path string
query string
fragment string
}
tests := []struct {
name string
args args
want URI
}{
{
name: "ValidFileScheme",
args: args{
scheme: "file",
authority: "example.com",
path: "/over/there",
query: "name=ferret",
fragment: "nose",
},
want: URI(FileScheme + hierPart + "/over/there"),
},
{
name: "ValidHTTPScheme",
args: args{
scheme: "http",
authority: "example.com:8042",
path: "/over/there",
query: "name=ferret",
fragment: "nose",
},
want: URI(HTTPScheme + hierPart + "example.com:8042/over/there?name%3Dferret#nose"),
},
{
name: "ValidHTTPSScheme",
args: args{
scheme: "https",
authority: "example.com:8042",
path: "/over/there",
query: "name=ferret",
fragment: "nose",
},
want: URI(HTTPSScheme + hierPart + "example.com:8042/over/there?name%3Dferret#nose"),
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if diff := cmp.Diff(From(tt.args.scheme, tt.args.authority, tt.args.path, tt.args.query, tt.args.fragment), tt.want); diff != "" {
t.Errorf("%s: (-got, +want)\n%s", tt.name, diff)
}
})
}
}