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 }