github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/tools/godoc/godoc_test.go (about)

     1  // Copyright 2013 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 godoc
     6  
     7  import (
     8  	"testing"
     9  )
    10  
    11  func TestPkgLinkFunc(t *testing.T) {
    12  	for _, tc := range []struct {
    13  		path string
    14  		want string
    15  	}{
    16  		{"/src/fmt", "pkg/fmt"},
    17  		{"src/fmt", "pkg/fmt"},
    18  		{"/fmt", "pkg/fmt"},
    19  		{"fmt", "pkg/fmt"},
    20  	} {
    21  		if got := pkgLinkFunc(tc.path); got != tc.want {
    22  			t.Errorf("pkgLinkFunc(%v) = %v; want %v", tc.path, got, tc.want)
    23  		}
    24  	}
    25  }
    26  
    27  func TestSrcPosLinkFunc(t *testing.T) {
    28  	for _, tc := range []struct {
    29  		src  string
    30  		line int
    31  		low  int
    32  		high int
    33  		want string
    34  	}{
    35  		{"/src/fmt/print.go", 42, 30, 50, "/src/fmt/print.go?s=30:50#L32"},
    36  		{"/src/fmt/print.go", 2, 1, 5, "/src/fmt/print.go?s=1:5#L1"},
    37  		{"/src/fmt/print.go", 2, 0, 0, "/src/fmt/print.go#L2"},
    38  		{"/src/fmt/print.go", 0, 0, 0, "/src/fmt/print.go"},
    39  		{"/src/fmt/print.go", 0, 1, 5, "/src/fmt/print.go?s=1:5#L1"},
    40  		{"fmt/print.go", 0, 0, 0, "/src/fmt/print.go"},
    41  		{"fmt/print.go", 0, 1, 5, "/src/fmt/print.go?s=1:5#L1"},
    42  	} {
    43  		if got := srcPosLinkFunc(tc.src, tc.line, tc.low, tc.high); got != tc.want {
    44  			t.Errorf("srcLinkFunc(%v, %v, %v, %v) = %v; want %v", tc.src, tc.line, tc.low, tc.high, got, tc.want)
    45  		}
    46  	}
    47  }
    48  
    49  func TestSrcLinkFunc(t *testing.T) {
    50  	for _, tc := range []struct {
    51  		src  string
    52  		want string
    53  	}{
    54  		{"/src/fmt/print.go", "/src/fmt/print.go"},
    55  		{"src/fmt/print.go", "/src/fmt/print.go"},
    56  		{"/fmt/print.go", "/src/fmt/print.go"},
    57  		{"fmt/print.go", "/src/fmt/print.go"},
    58  	} {
    59  		if got := srcLinkFunc(tc.src); got != tc.want {
    60  			t.Errorf("srcLinkFunc(%v) = %v; want %v", tc.src, got, tc.want)
    61  		}
    62  	}
    63  }
    64  
    65  func TestQueryLinkFunc(t *testing.T) {
    66  	for _, tc := range []struct {
    67  		src   string
    68  		query string
    69  		line  int
    70  		want  string
    71  	}{
    72  		{"/src/fmt/print.go", "Sprintf", 33, "/src/fmt/print.go?h=Sprintf#L33"},
    73  		{"/src/fmt/print.go", "Sprintf", 0, "/src/fmt/print.go?h=Sprintf"},
    74  		{"src/fmt/print.go", "EOF", 33, "/src/fmt/print.go?h=EOF#L33"},
    75  		{"src/fmt/print.go", "a%3f+%26b", 1, "/src/fmt/print.go?h=a%3f+%26b#L1"},
    76  	} {
    77  		if got := queryLinkFunc(tc.src, tc.query, tc.line); got != tc.want {
    78  			t.Errorf("queryLinkFunc(%v, %v, %v) = %v; want %v", tc.src, tc.query, tc.line, got, tc.want)
    79  		}
    80  	}
    81  }
    82  
    83  func TestDocLinkFunc(t *testing.T) {
    84  	for _, tc := range []struct {
    85  		src   string
    86  		ident string
    87  		want  string
    88  	}{
    89  		{"fmt", "Sprintf", "/pkg/fmt/#Sprintf"},
    90  		{"fmt", "EOF", "/pkg/fmt/#EOF"},
    91  	} {
    92  		if got := docLinkFunc(tc.src, tc.ident); got != tc.want {
    93  			t.Errorf("docLinkFunc(%v, %v) = %v; want %v", tc.src, tc.ident, got, tc.want)
    94  		}
    95  	}
    96  }
    97  
    98  func TestSanitizeFunc(t *testing.T) {
    99  	for _, tc := range []struct {
   100  		src  string
   101  		want string
   102  	}{
   103  		{},
   104  		{"foo", "foo"},
   105  		{"func   f()", "func f()"},
   106  		{"func f(a int,)", "func f(a int)"},
   107  		{"func f(a int,\n)", "func f(a int)"},
   108  		{"func f(\n\ta int,\n\tb int,\n\tc int,\n)", "func f(a int, b int, c int)"},
   109  		{"  (   a,   b,  c  )  ", "(a, b, c)"},
   110  		{"(  a,  b, c    int, foo   bar  ,  )", "(a, b, c int, foo bar)"},
   111  		{"{   a,   b}", "{a, b}"},
   112  		{"[   a,   b]", "[a, b]"},
   113  	} {
   114  		if got := sanitizeFunc(tc.src); got != tc.want {
   115  			t.Errorf("sanitizeFunc(%v) = %v; want %v", tc.src, got, tc.want)
   116  		}
   117  	}
   118  }