| // Copyright 2023 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package fs_test | |
| import ( | |
| . "io/fs" | |
| "testing" | |
| "time" | |
| ) | |
| // formatTest implements FileInfo to test FormatFileInfo, | |
| // and implements DirEntry to test FormatDirEntry. | |
| type formatTest struct { | |
| name string | |
| size int64 | |
| mode FileMode | |
| modTime time.Time | |
| isDir bool | |
| } | |
| func (fs *formatTest) Name() string { | |
| return fs.name | |
| } | |
| func (fs *formatTest) Size() int64 { | |
| return fs.size | |
| } | |
| func (fs *formatTest) Mode() FileMode { | |
| return fs.mode | |
| } | |
| func (fs *formatTest) ModTime() time.Time { | |
| return fs.modTime | |
| } | |
| func (fs *formatTest) IsDir() bool { | |
| return fs.isDir | |
| } | |
| func (fs *formatTest) Sys() any { | |
| return nil | |
| } | |
| func (fs *formatTest) Type() FileMode { | |
| return fs.mode.Type() | |
| } | |
| func (fs *formatTest) Info() (FileInfo, error) { | |
| return fs, nil | |
| } | |
| var formatTests = []struct { | |
| input formatTest | |
| wantFileInfo string | |
| wantDirEntry string | |
| }{ | |
| { | |
| formatTest{ | |
| name: "hello.go", | |
| size: 100, | |
| mode: 0o644, | |
| modTime: time.Date(1970, time.January, 1, 12, 0, 0, 0, time.UTC), | |
| isDir: false, | |
| }, | |
| "-rw-r--r-- 100 1970-01-01 12:00:00 hello.go", | |
| "- hello.go", | |
| }, | |
| { | |
| formatTest{ | |
| name: "home/gopher", | |
| size: 0, | |
| mode: ModeDir | 0o755, | |
| modTime: time.Date(1970, time.January, 1, 12, 0, 0, 0, time.UTC), | |
| isDir: true, | |
| }, | |
| "drwxr-xr-x 0 1970-01-01 12:00:00 home/gopher/", | |
| "d home/gopher/", | |
| }, | |
| { | |
| formatTest{ | |
| name: "big", | |
| size: 0x7fffffffffffffff, | |
| mode: ModeIrregular | 0o644, | |
| modTime: time.Date(1970, time.January, 1, 12, 0, 0, 0, time.UTC), | |
| isDir: false, | |
| }, | |
| "?rw-r--r-- 9223372036854775807 1970-01-01 12:00:00 big", | |
| "? big", | |
| }, | |
| { | |
| formatTest{ | |
| name: "small", | |
| size: -0x8000000000000000, | |
| mode: ModeSocket | ModeSetuid | 0o644, | |
| modTime: time.Date(1970, time.January, 1, 12, 0, 0, 0, time.UTC), | |
| isDir: false, | |
| }, | |
| "Surw-r--r-- -9223372036854775808 1970-01-01 12:00:00 small", | |
| "S small", | |
| }, | |
| } | |
| func TestFormatFileInfo(t *testing.T) { | |
| for i, test := range formatTests { | |
| got := FormatFileInfo(&test.input) | |
| if got != test.wantFileInfo { | |
| t.Errorf("%d: FormatFileInfo(%#v) = %q, want %q", i, test.input, got, test.wantFileInfo) | |
| } | |
| } | |
| } | |
| func TestFormatDirEntry(t *testing.T) { | |
| for i, test := range formatTests { | |
| got := FormatDirEntry(&test.input) | |
| if got != test.wantDirEntry { | |
| t.Errorf("%d: FormatDirEntry(%#v) = %q, want %q", i, test.input, got, test.wantDirEntry) | |
| } | |
| } | |
| } |