github.com/t-ham752/go-linux@v0.0.0-20230521064409-70f30d2872cc/pkg/ls/ls_test.go (about)

     1  package ls
     2  
     3  import (
     4  	"bytes"
     5  	"flag"
     6  	"os"
     7  	"testing"
     8  
     9  	"github.com/google/go-cmp/cmp"
    10  	"github.com/google/go-cmp/cmp/cmpopts"
    11  )
    12  
    13  func TestNewLsFlags(t *testing.T) {
    14  	tests := []struct {
    15  		name string
    16  		args []string
    17  		want *LsFlags
    18  	}{
    19  		{
    20  			name: "フラグなし",
    21  			args: []string{},
    22  			want: &LsFlags{},
    23  		},
    24  		{
    25  			name: "'-a'を渡す",
    26  			args: []string{"-a"},
    27  			want: &LsFlags{ShowAll: true},
    28  		},
    29  	}
    30  	for _, tt := range tests {
    31  		t.Run(tt.name, func(t *testing.T) {
    32  			commandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
    33  			got, err := newLsFlags(tt.args)
    34  			if err != nil {
    35  				t.Fatal(err)
    36  			}
    37  			if d := cmp.Diff(tt.want, got); len(d) != 0 {
    38  				t.Errorf("differs: (-got +want)\n%s", d)
    39  			}
    40  		})
    41  	}
    42  }
    43  
    44  func TestRun(t *testing.T) {
    45  	tests := []struct {
    46  		name string
    47  		fs   *LsFlags
    48  		want string
    49  	}{
    50  		{
    51  			name: "フラグなし",
    52  			fs:   &LsFlags{},
    53  			want: `test_file.go
    54  test_file.txt
    55  `,
    56  		},
    57  		{
    58  			name: "'-a'を渡して隠しファイルも表示する",
    59  			fs:   &LsFlags{ShowAll: true},
    60  			want: `.secret
    61  test_file.go
    62  test_file.txt
    63  `,
    64  		},
    65  		{
    66  			name: "'-l'を渡してファイルの詳細を表示する",
    67  			fs:   &LsFlags{ShowDetails: true},
    68  			want: `-rw-r--r-- 1 hamoro staff 0 4 24 19:37 test_file.go
    69  -rw-r--r-- 1 hamoro staff 0 4 24 19:37 test_file.txt
    70  `,
    71  		},
    72  	}
    73  	for _, tt := range tests {
    74  		t.Run(tt.name, func(t *testing.T) {
    75  			os.Chdir("testdata")
    76  			t.Cleanup(func() {
    77  				os.Chdir("..")
    78  			})
    79  			stdout := bytes.Buffer{}
    80  			err := run(tt.fs, &stdout)
    81  			if err != nil {
    82  				t.Fatal(err)
    83  			}
    84  			got := stdout.String()
    85  			if got != tt.want {
    86  				t.Errorf("got %q, want %q", got, tt.want)
    87  			}
    88  		})
    89  	}
    90  }
    91  
    92  func TestGetStat(t *testing.T) {
    93  	tests := []struct {
    94  		name string
    95  		fs   *LsFlags
    96  		want *StatT
    97  	}{
    98  		{
    99  			name: "フラグなし",
   100  			fs:   &LsFlags{},
   101  			want: &StatT{
   102  				Nlink: 1,
   103  				Group: "staff",
   104  			},
   105  		},
   106  	}
   107  	for _, tt := range tests {
   108  		t.Run(tt.name, func(t *testing.T) {
   109  			os.Chdir("testdata")
   110  			t.Cleanup(func() {
   111  				os.Chdir("..")
   112  			})
   113  			files, err := os.ReadDir(".")
   114  			if err != nil {
   115  				t.Fatal(err)
   116  			}
   117  			fs, err := files[0].Info()
   118  			if err != nil {
   119  				t.Fatal(err)
   120  			}
   121  			st, err := getStat(fs)
   122  			if err != nil {
   123  				t.Fatal(err)
   124  			}
   125  			opt := cmpopts.IgnoreFields(*tt.want, "Owner")
   126  			if d := cmp.Diff(tt.want, st, opt); len(d) != 0 {
   127  				t.Errorf("differs: (-got +want)\n%s", d)
   128  			}
   129  		})
   130  	}
   131  }