sigs.k8s.io/prow@v0.0.0-20240503223140-c5e374dc7eb1/pkg/gitattributes/gitattributes_test.go (about) 1 /* 2 Copyright 2019 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package gitattributes 18 19 import ( 20 "bytes" 21 "testing" 22 ) 23 24 func TestLoad(t *testing.T) { 25 var cases = []struct { 26 name string 27 src string 28 nbLinguistGeneratedPatterns int 29 expectError bool 30 }{ 31 { 32 name: "kubernetes", 33 src: `hack/verify-flags/known-flags.txt merge=union 34 35 **/zz_generated.*.go linguist-generated=true 36 **/types.generated.go linguist-generated=true 37 **/generated.pb.go linguist-generated=true 38 **/generated.proto 39 **/types_swagger_doc_generated.go linguist-generated=true 40 docs/api-reference/** linguist-generated=true 41 api/swagger-spec/*.json linguist-generated=true 42 api/openapi-spec/*.json linguist-generated=true`, 43 nbLinguistGeneratedPatterns: 7, 44 }, 45 { 46 name: "mholt/caddy", 47 src: `# shell scripts should not use tabs to indent! 48 *.bash text eol=lf core.whitespace whitespace=tab-in-indent,trailing-space,tabwidth=2 49 *.sh text eol=lf core.whitespace whitespace=tab-in-indent,trailing-space,tabwidth=2 50 51 # files for systemd (shell-similar) 52 *.path text eol=lf core.whitespace whitespace=tab-in-indent,trailing-space,tabwidth=2 53 *.service text eol=lf core.whitespace whitespace=tab-in-indent,trailing-space,tabwidth=2 54 *.timer text eol=lf core.whitespace whitespace=tab-in-indent,trailing-space,tabwidth=2 55 56 # go fmt will enforce this, but in case a user has not called "go fmt" allow GIT to catch this: 57 *.go text eol=lf core.whitespace whitespace=indent-with-non-tab,trailing-space,tabwidth=4 58 59 *.yml text eol=lf core.whitespace whitespace=tab-in-indent,trailing-space,tabwidth=2 60 .git* text eol=auto core.whitespace whitespace=trailing-space`, 61 }, 62 { 63 name: "opencontainers/runtime-spec", 64 src: `# https://tools.ietf.org/html/rfc5545#section-3.1 65 *.ics text eol=crlf`, 66 }, 67 { 68 name: "test-infra/prow/cmd/phony/examples", 69 src: `# Treat webhook fixtures as generated so they don't clutter PRs 70 *.json linguist-generated=true`, 71 nbLinguistGeneratedPatterns: 1, 72 }, 73 { 74 name: "wrong pattern", 75 src: `abc/ linguist-generated=true`, 76 expectError: true, 77 }, 78 } 79 for _, c := range cases { 80 t.Run(c.name, func(t *testing.T) { 81 g := &Group{ 82 LinguistGeneratedPatterns: []Pattern{}, 83 } 84 if err := g.load(bytes.NewBufferString(c.src)); err != nil && !c.expectError { 85 t.Fatalf("load error: %v", err) 86 } 87 if got := len(g.LinguistGeneratedPatterns); got != c.nbLinguistGeneratedPatterns { 88 t.Fatalf("len(g.LinguistGeneratedPatterns) mismatch: got %d, want %d", got, c.nbLinguistGeneratedPatterns) 89 } 90 }) 91 } 92 } 93 94 func TestIsLinguistGenerated(t *testing.T) { 95 var src = `hack/verify-flags/known-flags.txt merge=union 96 97 **/zz_generated.*.go linguist-generated=true 98 **/types.generated.go linguist-generated=true 99 **/generated.pb.go linguist-generated=true 100 **/generated.proto 101 **/types_swagger_doc_generated.go linguist-generated=true 102 docs/api-reference/** linguist-generated=true 103 api/swagger-spec/*.json linguist-generated=true 104 api/openapi-spec/*.json linguist-generated=true` 105 var cases = []struct { 106 name string 107 path string 108 want bool 109 }{ 110 { 111 name: "known-flags.txt", 112 path: "hack/verify-flags/known-flags.txt", 113 want: false, 114 }, 115 { 116 name: "generated.proto", 117 path: "a/generated.proto", 118 want: false, 119 }, 120 { 121 name: "generated.pb.go", 122 path: "a/b/generated.pb.go", 123 want: true, 124 }, 125 { 126 name: "abc.xml", 127 path: "docs/api-reference/a/b/c/abc.xml", 128 want: true, 129 }, 130 { 131 name: "abc.json", 132 path: "api/openapi-spec/abc.json", 133 want: true, 134 }, 135 } 136 for _, c := range cases { 137 g := &Group{ 138 LinguistGeneratedPatterns: []Pattern{}, 139 } 140 if err := g.load(bytes.NewBufferString(src)); err != nil { 141 t.Fatalf("load error: %v", err) 142 } 143 t.Run(c.name, func(t *testing.T) { 144 if got := g.IsLinguistGenerated(c.path); got != c.want { 145 t.Fatalf("IsLinguistGenerated mismatch: got %t, want %t", got, c.want) 146 } 147 }) 148 } 149 }