github.com/PentoHQ/moq@v0.0.0-20190507125140-c45c141f300b/pkg/moq/moq_modules_test.go (about)

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