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 }