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 }