github.com/AndrienkoAleksandr/go@v0.0.19/src/go/ast/ast_test.go (about) 1 // Copyright 2012 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 ast 6 7 import ( 8 "testing" 9 ) 10 11 var comments = []struct { 12 list []string 13 text string 14 }{ 15 {[]string{"//"}, ""}, 16 {[]string{"// "}, ""}, 17 {[]string{"//", "//", "// "}, ""}, 18 {[]string{"// foo "}, "foo\n"}, 19 {[]string{"//", "//", "// foo"}, "foo\n"}, 20 {[]string{"// foo bar "}, "foo bar\n"}, 21 {[]string{"// foo", "// bar"}, "foo\nbar\n"}, 22 {[]string{"// foo", "//", "//", "//", "// bar"}, "foo\n\nbar\n"}, 23 {[]string{"// foo", "/* bar */"}, "foo\n bar\n"}, 24 {[]string{"//", "//", "//", "// foo", "//", "//", "//"}, "foo\n"}, 25 26 {[]string{"/**/"}, ""}, 27 {[]string{"/* */"}, ""}, 28 {[]string{"/**/", "/**/", "/* */"}, ""}, 29 {[]string{"/* Foo */"}, " Foo\n"}, 30 {[]string{"/* Foo Bar */"}, " Foo Bar\n"}, 31 {[]string{"/* Foo*/", "/* Bar*/"}, " Foo\n Bar\n"}, 32 {[]string{"/* Foo*/", "/**/", "/**/", "/**/", "// Bar"}, " Foo\n\nBar\n"}, 33 {[]string{"/* Foo*/", "/*\n*/", "//", "/*\n*/", "// Bar"}, " Foo\n\nBar\n"}, 34 {[]string{"/* Foo*/", "// Bar"}, " Foo\nBar\n"}, 35 {[]string{"/* Foo\n Bar*/"}, " Foo\n Bar\n"}, 36 37 {[]string{"// foo", "//go:noinline", "// bar", "//:baz"}, "foo\nbar\n:baz\n"}, 38 {[]string{"// foo", "//lint123:ignore", "// bar"}, "foo\nbar\n"}, 39 } 40 41 func TestCommentText(t *testing.T) { 42 for i, c := range comments { 43 list := make([]*Comment, len(c.list)) 44 for i, s := range c.list { 45 list[i] = &Comment{Text: s} 46 } 47 48 text := (&CommentGroup{list}).Text() 49 if text != c.text { 50 t.Errorf("case %d: got %q; expected %q", i, text, c.text) 51 } 52 } 53 } 54 55 var isDirectiveTests = []struct { 56 in string 57 ok bool 58 }{ 59 {"abc", false}, 60 {"go:inline", true}, 61 {"Go:inline", false}, 62 {"go:Inline", false}, 63 {":inline", false}, 64 {"lint:ignore", true}, 65 {"lint:1234", true}, 66 {"1234:lint", true}, 67 {"go: inline", false}, 68 {"go:", false}, 69 {"go:*", false}, 70 {"go:x*", true}, 71 {"export foo", true}, 72 {"extern foo", true}, 73 {"expert foo", false}, 74 } 75 76 func TestIsDirective(t *testing.T) { 77 for _, tt := range isDirectiveTests { 78 if ok := isDirective(tt.in); ok != tt.ok { 79 t.Errorf("isDirective(%q) = %v, want %v", tt.in, ok, tt.ok) 80 } 81 } 82 }