// Copyright 2024 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. //go:build windows package os_test import ( "errors" "os" "path/filepath" "testing" ) // Verify that Root.Open rejects Windows reserved names. func TestRootWindowsDeviceNames(t *testing.T) { r, err := os.OpenRoot(t.TempDir()) if err != nil { t.Fatal(err) } defer r.Close() if f, err := r.Open("NUL"); err == nil { t.Errorf(`r.Open("NUL") succeeded; want error"`) f.Close() } } // Verify that Root.Open is case-insensitive. // (The wrong options to NtOpenFile could make operations case-sensitive, // so this is worth checking.) func TestRootWindowsCaseInsensitivity(t *testing.T) { dir := t.TempDir() if err := os.WriteFile(filepath.Join(dir, "file"), nil, 0666); err != nil { t.Fatal(err) } r, err := os.OpenRoot(dir) if err != nil { t.Fatal(err) } defer r.Close() f, err := r.Open("FILE") if err != nil { t.Fatal(err) } f.Close() if err := r.Remove("FILE"); err != nil { t.Fatal(err) } if _, err := os.Stat(filepath.Join(dir, "file")); !errors.Is(err, os.ErrNotExist) { t.Fatalf("os.Stat(file) after deletion: %v, want ErrNotFound", err) } }