golang.org/x/tools@v0.21.0/go/analysis/internal/analysisflags/url_test.go (about) 1 // Copyright 2023 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package analysisflags_test 6 7 import ( 8 "fmt" 9 "strings" 10 "testing" 11 12 "golang.org/x/tools/go/analysis" 13 "golang.org/x/tools/go/analysis/internal/analysisflags" 14 ) 15 16 func TestResolveURLs(t *testing.T) { 17 // TestResolveURL test the 12 different combinations for how URLs can be resolved 18 // when Analyzer.URL are Diagnostic.Category are empty or non-empty, and when 19 // Diagnostic.URL is empty, absolute or relative. 20 21 aURL := &analysis.Analyzer{URL: "https://analyzer.example"} 22 noURL := &analysis.Analyzer{URL: ""} 23 tests := []struct { 24 analyzer *analysis.Analyzer 25 diagnostic analysis.Diagnostic 26 want string 27 }{ 28 {noURL, analysis.Diagnostic{Category: "", URL: ""}, ""}, 29 {noURL, analysis.Diagnostic{Category: "", URL: "#relative"}, "#relative"}, 30 {noURL, analysis.Diagnostic{Category: "", URL: "https://absolute.diagnostic"}, "https://absolute.diagnostic"}, 31 {noURL, analysis.Diagnostic{Category: "category", URL: ""}, "#category"}, 32 {noURL, analysis.Diagnostic{Category: "category", URL: "#relative"}, "#relative"}, 33 {noURL, analysis.Diagnostic{Category: "category", URL: "https://absolute.diagnostic"}, "https://absolute.diagnostic"}, 34 {aURL, analysis.Diagnostic{Category: "", URL: ""}, "https://analyzer.example"}, 35 {aURL, analysis.Diagnostic{Category: "", URL: "#relative"}, "https://analyzer.example#relative"}, 36 {aURL, analysis.Diagnostic{Category: "", URL: "https://absolute.diagnostic"}, "https://absolute.diagnostic"}, 37 {aURL, analysis.Diagnostic{Category: "category", URL: ""}, "https://analyzer.example#category"}, 38 {aURL, analysis.Diagnostic{Category: "category", URL: "#relative"}, "https://analyzer.example#relative"}, 39 {aURL, analysis.Diagnostic{Category: "category", URL: "https://absolute.diagnostic"}, "https://absolute.diagnostic"}, 40 } 41 for _, c := range tests { 42 got, err := analysisflags.ResolveURL(c.analyzer, c.diagnostic) 43 if err != nil { 44 t.Errorf("Unexpected error from ResolveURL %s", err) 45 } else if got != c.want { 46 t.Errorf("ResolveURL(%q,%v)=%q. want %s", c.analyzer.URL, c.diagnostic, got, c.want) 47 } 48 } 49 } 50 51 func TestResolveURLErrors(t *testing.T) { 52 tests := []struct { 53 analyzer *analysis.Analyzer 54 diagnostic analysis.Diagnostic 55 want string 56 }{ 57 {&analysis.Analyzer{URL: ":not a url"}, analysis.Diagnostic{Category: "", URL: "#relative"}, "invalid Analyzer.URL"}, 58 {&analysis.Analyzer{URL: "https://analyzer.example"}, analysis.Diagnostic{Category: "", URL: ":not a URL"}, "invalid Diagnostic.URL"}, 59 } 60 for _, c := range tests { 61 _, err := analysisflags.ResolveURL(c.analyzer, c.diagnostic) 62 if got := fmt.Sprint(err); !strings.HasPrefix(got, c.want) { 63 t.Errorf("ResolveURL(%q, %q) expected an error starting with %q. got %q", c.analyzer.URL, c.diagnostic.URL, c.want, got) 64 } 65 } 66 }