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  `