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  }