github.com/moitias/moq@v0.0.0-20240223074357-5eb0f0ba4054/pkg/moq/moq_modules_test.go (about)

     1  //go:build go1.11
     2  // +build go1.11
     3  
     4  package moq
     5  
     6  import (
     7  	"bytes"
     8  	"io"
     9  	"io/ioutil"
    10  	"os"
    11  	"path/filepath"
    12  	"strings"
    13  	"testing"
    14  )
    15  
    16  // copy copies srcPath to destPath, dirs and files
    17  func copy(srcPath, destPath string, item os.FileInfo) error {
    18  	if item.IsDir() {
    19  		if err := os.MkdirAll(destPath, os.FileMode(0750)); err != nil {
    20  			return err
    21  		}
    22  		items, err := ioutil.ReadDir(srcPath)
    23  		if err != nil {
    24  			return err
    25  		}
    26  		for _, item := range items {
    27  			src := filepath.Join(srcPath, item.Name())
    28  			dest := filepath.Join(destPath, item.Name())
    29  			if err := copy(src, dest, item); err != nil {
    30  				return err
    31  			}
    32  		}
    33  	} else {
    34  		src, err := os.Open(srcPath)
    35  		if err != nil {
    36  			return err
    37  		}
    38  		defer src.Close()
    39  
    40  		dest, err := os.Create(destPath)
    41  		if err != nil {
    42  			return err
    43  		}
    44  		defer dest.Close()
    45  
    46  		_, err = io.Copy(dest, src)
    47  		if err != nil {
    48  			return err
    49  		}
    50  	}
    51  	return nil
    52  }
    53  
    54  // copyTestPackage copies test package to a temporary directory
    55  func copyTestPackage(srcPath string) (string, error) {
    56  	tmpDir, err := ioutil.TempDir("", "moq-tests")
    57  	if err != nil {
    58  		return "", err
    59  	}
    60  
    61  	info, err := os.Lstat(srcPath)
    62  	if err != nil {
    63  		return tmpDir, err
    64  	}
    65  	return tmpDir, copy(srcPath, tmpDir, info)
    66  }
    67  
    68  func TestModulesSamePackage(t *testing.T) {
    69  	tmpDir, err := copyTestPackage("testpackages/modules")
    70  	defer os.RemoveAll(tmpDir)
    71  	if err != nil {
    72  		t.Fatalf("Test package copy error: %s", err)
    73  	}
    74  
    75  	m, err := New(Config{SrcDir: tmpDir})
    76  	if err != nil {
    77  		t.Fatalf("moq.New: %s", err)
    78  	}
    79  	var buf bytes.Buffer
    80  	err = m.Mock(&buf, "Foo")
    81  	if err != nil {
    82  		t.Errorf("m.Mock: %s", err)
    83  	}
    84  	s := buf.String()
    85  	if strings.Contains(s, `github.com/matryer/modules`) {
    86  		t.Errorf("should not have cyclic dependency")
    87  	}
    88  	// assertions of things that should be mentioned
    89  	var strs = []string{
    90  		"package simple",
    91  		"var _ Foo = &FooMock{}",
    92  		"type FooMock struct",
    93  	}
    94  	for _, str := range strs {
    95  		if !strings.Contains(s, str) {
    96  			t.Errorf("expected but missing: \"%s\"", str)
    97  		}
    98  	}
    99  }
   100  func TestModulesNestedPackage(t *testing.T) {
   101  	tmpDir, err := copyTestPackage("testpackages/modules")
   102  	defer os.RemoveAll(tmpDir)
   103  	if err != nil {
   104  		t.Fatalf("Test package copy error: %s", err)
   105  	}
   106  
   107  	m, err := New(Config{SrcDir: tmpDir, PkgName: "nested"})
   108  	if err != nil {
   109  		t.Fatalf("moq.New: %s", err)
   110  	}
   111  	var buf bytes.Buffer
   112  	err = m.Mock(&buf, "Foo")
   113  	if err != nil {
   114  		t.Errorf("m.Mock: %s", err)
   115  	}
   116  	s := buf.String()
   117  	// assertions of things that should be mentioned
   118  	var strs = []string{
   119  		"package nested",
   120  		"github.com/moitias/modules",
   121  		"var _ simple.Foo = &FooMock{}",
   122  		"type FooMock struct",
   123  		"func (mock *FooMock) FooIt(bar *simple.Bar) {",
   124  	}
   125  	for _, str := range strs {
   126  		if !strings.Contains(s, str) {
   127  			t.Errorf("expected but missing: \"%s\"", str)
   128  		}
   129  	}
   130  }