1// Copyright 2023 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package fs_test 6 7import ( 8 . "io/fs" 9 "testing" 10 "time" 11) 12 13// formatTest implements FileInfo to test FormatFileInfo, 14// and implements DirEntry to test FormatDirEntry. 15type formatTest struct { 16 name string 17 size int64 18 mode FileMode 19 modTime time.Time 20 isDir bool 21} 22 23func (fs *formatTest) Name() string { 24 return fs.name 25} 26 27func (fs *formatTest) Size() int64 { 28 return fs.size 29} 30 31func (fs *formatTest) Mode() FileMode { 32 return fs.mode 33} 34 35func (fs *formatTest) ModTime() time.Time { 36 return fs.modTime 37} 38 39func (fs *formatTest) IsDir() bool { 40 return fs.isDir 41} 42 43func (fs *formatTest) Sys() any { 44 return nil 45} 46 47func (fs *formatTest) Type() FileMode { 48 return fs.mode.Type() 49} 50 51func (fs *formatTest) Info() (FileInfo, error) { 52 return fs, nil 53} 54 55var formatTests = []struct { 56 input formatTest 57 wantFileInfo string 58 wantDirEntry string 59}{ 60 { 61 formatTest{ 62 name: "hello.go", 63 size: 100, 64 mode: 0o644, 65 modTime: time.Date(1970, time.January, 1, 12, 0, 0, 0, time.UTC), 66 isDir: false, 67 }, 68 "-rw-r--r-- 100 1970-01-01 12:00:00 hello.go", 69 "- hello.go", 70 }, 71 { 72 formatTest{ 73 name: "home/gopher", 74 size: 0, 75 mode: ModeDir | 0o755, 76 modTime: time.Date(1970, time.January, 1, 12, 0, 0, 0, time.UTC), 77 isDir: true, 78 }, 79 "drwxr-xr-x 0 1970-01-01 12:00:00 home/gopher/", 80 "d home/gopher/", 81 }, 82 { 83 formatTest{ 84 name: "big", 85 size: 0x7fffffffffffffff, 86 mode: ModeIrregular | 0o644, 87 modTime: time.Date(1970, time.January, 1, 12, 0, 0, 0, time.UTC), 88 isDir: false, 89 }, 90 "?rw-r--r-- 9223372036854775807 1970-01-01 12:00:00 big", 91 "? big", 92 }, 93 { 94 formatTest{ 95 name: "small", 96 size: -0x8000000000000000, 97 mode: ModeSocket | ModeSetuid | 0o644, 98 modTime: time.Date(1970, time.January, 1, 12, 0, 0, 0, time.UTC), 99 isDir: false, 100 }, 101 "Surw-r--r-- -9223372036854775808 1970-01-01 12:00:00 small", 102 "S small", 103 }, 104} 105 106func TestFormatFileInfo(t *testing.T) { 107 for i, test := range formatTests { 108 got := FormatFileInfo(&test.input) 109 if got != test.wantFileInfo { 110 t.Errorf("%d: FormatFileInfo(%#v) = %q, want %q", i, test.input, got, test.wantFileInfo) 111 } 112 } 113} 114 115func TestFormatDirEntry(t *testing.T) { 116 for i, test := range formatTests { 117 got := FormatDirEntry(&test.input) 118 if got != test.wantDirEntry { 119 t.Errorf("%d: FormatDirEntry(%#v) = %q, want %q", i, test.input, got, test.wantDirEntry) 120 } 121 } 122 123} 124