// 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" "testing/fstest" ) func TestReadLink(t *testing.T) { testFS := fstest.MapFS{ "foo": { Data: []byte("bar"), Mode: ModeSymlink | 0o777, }, "bar": { Data: []byte("Hello, World!\n"), Mode: 0o644, }, "dir/parentlink": { Data: []byte("../bar"), Mode: ModeSymlink | 0o777, }, "dir/link": { Data: []byte("file"), Mode: ModeSymlink | 0o777, }, "dir/file": { Data: []byte("Hello, World!\n"), Mode: 0o644, }, } check := func(fsys FS, name string, want string) { t.Helper() got, err := ReadLink(fsys, name) if got != want || err != nil { t.Errorf("ReadLink(%q) = %q, %v; want %q, ", name, got, err, want) } } check(testFS, "foo", "bar") check(testFS, "dir/parentlink", "../bar") check(testFS, "dir/link", "file") // Test that ReadLink on Sub works. sub, err := Sub(testFS, "dir") if err != nil { t.Fatal(err) } check(sub, "link", "file") check(sub, "parentlink", "../bar") } func TestLstat(t *testing.T) { testFS := fstest.MapFS{ "foo": { Data: []byte("bar"), Mode: ModeSymlink | 0o777, }, "bar": { Data: []byte("Hello, World!\n"), Mode: 0o644, }, "dir/parentlink": { Data: []byte("../bar"), Mode: ModeSymlink | 0o777, }, "dir/link": { Data: []byte("file"), Mode: ModeSymlink | 0o777, }, "dir/file": { Data: []byte("Hello, World!\n"), Mode: 0o644, }, } check := func(fsys FS, name string, want FileMode) { t.Helper() info, err := Lstat(fsys, name) var got FileMode if err == nil { got = info.Mode() } if got != want || err != nil { t.Errorf("Lstat(%q) = %v, %v; want %v, ", name, got, err, want) } } check(testFS, "foo", ModeSymlink|0o777) check(testFS, "bar", 0o644) // Test that Lstat on Sub works. sub, err := Sub(testFS, "dir") if err != nil { t.Fatal(err) } check(sub, "link", ModeSymlink|0o777) }