github.com/ktr0731/dept@v0.1.4-0.20191208040738-06ee3ca97c03/deptfile/deptfile_test.go (about) 1 package deptfile_test 2 3 import ( 4 "context" 5 "flag" 6 "io/ioutil" 7 "log" 8 "os" 9 "path/filepath" 10 "testing" 11 12 "github.com/ktr0731/dept/deptfile" 13 "github.com/ktr0731/dept/fileutil" 14 ) 15 16 var ( 17 verbose = flag.Bool("verbose", false, "verbose mode") 18 l *log.Logger 19 ) 20 21 // setupEnv creates a new temp dir for testing. 22 // Also setupEnv copies go.mod and go.sum from cwd to the temp dir. 23 // Finally, it changes current working directory to the temp dir. 24 // Callers must call returned function (cleanup function) at end of each test. 25 func setupEnv(t *testing.T, cwd string) func() { 26 t.Helper() 27 28 dir, err := ioutil.TempDir("", "") 29 if err != nil { 30 t.Fatalf("failed to create a temp dir: %s", err) 31 } 32 l.Printf("setupEnv: created a temp dir %s\n", dir) 33 34 pwd, err := os.Getwd() 35 if err != nil { 36 t.Fatalf("failed to get current dir: %s", err) 37 } 38 39 err = fileutil.Copy(filepath.Join(dir, deptfile.FileName), filepath.Join(cwd, deptfile.FileName)) 40 if err != nil { 41 t.Fatalf("failed to open and read testdata/gotool.mod: %s", err) 42 } 43 err = fileutil.Copy(filepath.Join(dir, deptfile.FileSumName), filepath.Join(cwd, deptfile.FileSumName)) 44 if err != nil { 45 t.Fatalf("failed to open and read testdata/gotool.mod: %s", err) 46 } 47 48 _ = os.Chdir(dir) 49 return func() { 50 _ = os.Chdir(pwd) 51 os.RemoveAll(dir) 52 } 53 } 54 55 func TestCreate(t *testing.T) { 56 flag.Parse() 57 if *verbose { 58 l = log.New(os.Stderr, "[debug] ", log.LstdFlags|log.Lshortfile) 59 } else { 60 l = log.New(ioutil.Discard, "[debug] ", log.Lshortfile) 61 } 62 63 t.Run("Create must return ErrAlreadyExist because deptfile exists", func(t *testing.T) { 64 cleanup := setupEnv(t, filepath.Join("testdata", "normal")) 65 defer cleanup() 66 67 err := deptfile.Create(context.Background()) 68 if err == nil { 69 t.Error("Create must return an error, but got nil") 70 } 71 }) 72 73 t.Run("Create must not return errors", func(t *testing.T) { 74 cleanup := setupEnv(t, filepath.Join("testdata", "normal")) 75 defer cleanup() 76 77 if err := os.Remove(deptfile.FileName); err != nil { 78 t.Fatalf("failed to remove go.mod from the temp dir: %s", err) 79 } 80 if err := os.Remove(deptfile.FileSumName); err != nil { 81 t.Fatalf("failed to remove go.sum from the temp dir: %s", err) 82 } 83 84 err := deptfile.Create(context.Background()) 85 if err != nil { 86 t.Fatalf("Create must not return an error, but got: %s", err) 87 } 88 89 if _, err := os.Stat(deptfile.FileName); os.IsNotExist(err) { 90 t.Error("after Create called, deptfile is in current dir, but missing") 91 } 92 }) 93 }