go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/sdk/copyright/main_test.go (about) 1 /* 2 3 Copyright (c) 2023 - Present. Will Charczuk. All rights reserved. 4 Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository. 5 6 */ 7 8 package copyright 9 10 import ( 11 "os" 12 "path/filepath" 13 "testing" 14 15 "go.charczuk.com/sdk/assert" 16 ) 17 18 var testCopyrightHolder copyrightHolder = "Bailey Dog" 19 20 type copyrightHolder string 21 22 func (ch copyrightHolder) CopyrightHolder() string { 23 return string(ch) 24 } 25 26 func withYear(year int) *Copyright { 27 return &Copyright{ 28 Config: Config{ 29 CopyrightHolder: string(testCopyrightHolder), 30 Year: year, 31 RestrictionsTemplate: DefaultRestrictionsTemplateInternal, 32 }, 33 } 34 } 35 36 func generateGoNotice(c *Copyright) ([]byte, error) { 37 noticeBody, err := c.compileNoticeTemplate(c.NoticeTemplateOrDefault()) 38 if err != nil { 39 return nil, err 40 } 41 42 compiled, err := c.compileInjectionTemplate(goInjectionTemplate, noticeBody) 43 if err != nil { 44 return nil, err 45 } 46 return []byte(compiled), nil 47 } 48 49 func generateTypescriptNotice(c *Copyright) ([]byte, error) { 50 noticeBody, err := c.compileNoticeTemplate(c.NoticeTemplateOrDefault()) 51 if err != nil { 52 return nil, err 53 } 54 55 compiled, err := c.compileInjectionTemplate(tsInjectionTemplate, noticeBody) 56 if err != nil { 57 return nil, err 58 } 59 return []byte(compiled), nil 60 } 61 62 // createTestFS creates a temp dir with files in them, with _no_ copyright headers. 63 // 64 // there should be at least (1) failure. 65 func createTestFS(t *testing.T) (tempDir string, revert func()) { 66 // create a temp dir 67 var err error 68 tempDir, err = os.MkdirTemp("", "copyright_test") 69 assert.ItsNil(t, err) 70 revert = func() { 71 os.RemoveAll(tempDir) 72 } 73 74 // create some files 75 err = os.MkdirAll(filepath.Join(tempDir, "foo", "bar"), 0755) 76 assert.ItsNil(t, err) 77 err = os.MkdirAll(filepath.Join(tempDir, "bar", "foo"), 0755) 78 assert.ItsNil(t, err) 79 80 err = os.MkdirAll(filepath.Join(tempDir, "not-bar", "not-foo"), 0755) 81 assert.ItsNil(t, err) 82 83 err = os.WriteFile(filepath.Join(tempDir, "file0.py"), []byte(pyFile0), 0644) 84 assert.ItsNil(t, err) 85 86 err = os.WriteFile(filepath.Join(tempDir, "file0.ts"), []byte(tsFile0), 0644) 87 assert.ItsNil(t, err) 88 89 err = os.WriteFile(filepath.Join(tempDir, "file1.ts"), []byte(tsFile1), 0644) 90 assert.ItsNil(t, err) 91 92 err = os.WriteFile(filepath.Join(tempDir, "file0.go"), []byte(goFile0), 0644) 93 assert.ItsNil(t, err) 94 95 err = os.WriteFile(filepath.Join(tempDir, "foo", "bar", "file0.py"), []byte(pyFile0), 0644) 96 assert.ItsNil(t, err) 97 98 err = os.WriteFile(filepath.Join(tempDir, "foo", "bar", "file0.ts"), []byte(tsFile0), 0644) 99 assert.ItsNil(t, err) 100 101 err = os.WriteFile(filepath.Join(tempDir, "foo", "bar", "file1.ts"), []byte(tsFile1), 0644) 102 assert.ItsNil(t, err) 103 104 err = os.WriteFile(filepath.Join(tempDir, "foo", "bar", "file0.go"), []byte(goFile0), 0644) 105 assert.ItsNil(t, err) 106 107 err = os.WriteFile(filepath.Join(tempDir, "bar", "foo", "file0.py"), []byte(pyFile0), 0644) 108 assert.ItsNil(t, err) 109 110 err = os.WriteFile(filepath.Join(tempDir, "bar", "foo", "file0.ts"), []byte(tsFile0), 0644) 111 assert.ItsNil(t, err) 112 113 err = os.WriteFile(filepath.Join(tempDir, "bar", "foo", "file1.ts"), []byte(tsFile1), 0644) 114 assert.ItsNil(t, err) 115 116 err = os.WriteFile(filepath.Join(tempDir, "bar", "foo", "file0.go"), []byte(goFile0), 0644) 117 assert.ItsNil(t, err) 118 119 err = os.WriteFile(filepath.Join(tempDir, "not-bar", "not-foo", "file0.py"), []byte(pyFile0), 0644) 120 assert.ItsNil(t, err) 121 122 err = os.WriteFile(filepath.Join(tempDir, "not-bar", "not-foo", "file0.ts"), []byte(tsFile0), 0644) 123 assert.ItsNil(t, err) 124 125 err = os.WriteFile(filepath.Join(tempDir, "not-bar", "not-foo", "file1.ts"), []byte(tsFile1), 0644) 126 assert.ItsNil(t, err) 127 128 err = os.WriteFile(filepath.Join(tempDir, "not-bar", "not-foo", "file0.go"), []byte(goFile0), 0644) 129 assert.ItsNil(t, err) 130 return 131 } 132 133 const goBuildTags1 = `//go:build tag1 134 // +build tag1 135 136 package main 137 138 import ( 139 "fmt" 140 ) 141 142 func main() { 143 fmt.Println("foo") 144 } 145 ` 146 const goBuildTags2 = `// +build tag5 147 //go:build tag1 && tag2 && tag3 148 // +build tag1,tag2,tag3 149 // +build tag6 150 151 package main 152 153 import ( 154 "fmt" 155 ) 156 157 func main() { 158 fmt.Println("foo") 159 } 160 161 // +bulid tag9000 162 ` 163 164 const goBuildTags3 = `//go:build tag1 & tag2 165 166 package main 167 168 import ( 169 "fmt" 170 ) 171 172 func main() { 173 fmt.Println("foo") 174 } 175 176 //go:build tag3 177 ` 178 179 const goldenGoBuildTags1 = `//go:build tag1 180 // +build tag1 181 182 /* 183 184 Copyright (c) 2001 - Present. Bailey Dog. All rights reserved. 185 Bailey Dog Confidential - Restricted 186 187 */ 188 189 package main 190 191 import ( 192 "fmt" 193 ) 194 195 func main() { 196 fmt.Println("foo") 197 } 198 ` 199 200 const goldenGoBuildTags2 = `// +build tag5 201 //go:build tag1 && tag2 && tag3 202 // +build tag1,tag2,tag3 203 // +build tag6 204 205 /* 206 207 Copyright (c) 2001 - Present. Bailey Dog. All rights reserved. 208 Bailey Dog Confidential - Restricted 209 210 */ 211 212 package main 213 214 import ( 215 "fmt" 216 ) 217 218 func main() { 219 fmt.Println("foo") 220 } 221 222 // +bulid tag9000 223 ` 224 225 const goldenGoBuildTags3 = `//go:build tag1 & tag2 226 227 /* 228 229 Copyright (c) 2001 - Present. Bailey Dog. All rights reserved. 230 Bailey Dog Confidential - Restricted 231 232 */ 233 234 package main 235 236 import ( 237 "fmt" 238 ) 239 240 func main() { 241 fmt.Println("foo") 242 } 243 244 //go:build tag3 245 ` 246 247 const goldenTsReferenceTags = `/// <reference path="../types/testing.d.ts" /> 248 /// <reference path="../types/something.d.ts" /> 249 /// <reference path="../types/somethingElse.d.ts" /> 250 /// <reference path="../types/somethingMore.d.ts" /> 251 /// <reference path="../types/somethingLess.d.ts" /> 252 /** 253 * Copyright (c) 2022 - Present. Bailey Dog. All rights reserved. 254 * Bailey Dog Confidential - Restricted 255 */ 256 export * from '../types/goodOnes' 257 ` 258 259 const tsReferenceTags = `/// <reference path="../types/testing.d.ts" /> 260 /// <reference path="../types/something.d.ts" /> 261 /// <reference path="../types/somethingElse.d.ts" /> 262 /// <reference path="../types/somethingMore.d.ts" /> 263 /// <reference path="../types/somethingLess.d.ts" /> 264 export * from '../types/goodOnes' 265 ` 266 267 const goldenTsReferenceTag = `/// <reference path="../types/testing.d.ts" /> 268 /** 269 * Copyright (c) 2022 - Present. Bailey Dog. All rights reserved. 270 * Bailey Dog Confidential - Restricted 271 */ 272 273 export * from '../types/goodOnes' 274 ` 275 276 const tsReferenceTag = `/// <reference path="../types/testing.d.ts" /> 277 278 export * from '../types/goodOnes' 279 ` 280 281 const tsTest = `export * from '../types/goodOnes' 282 ` 283 284 const goldenTs = `/** 285 * Copyright (c) 2022 - Present. Bailey Dog. All rights reserved. 286 * Bailey Dog Confidential - Restricted 287 */ 288 export * from '../types/goodOnes' 289 `