// 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) } } }