testos_test.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Copyright (C) 2019 The Syncthing Authors.
  2. //
  3. // This Source Code Form is subject to the terms of the Mozilla Public
  4. // License, v. 2.0. If a copy of the MPL was not distributed with this file,
  5. // You can obtain one at https://mozilla.org/MPL/2.0/.
  6. package model
  7. import (
  8. "os"
  9. "time"
  10. )
  11. // fatal is the required common interface between *testing.B and *testing.T
  12. type fatal interface {
  13. Fatal(...interface{})
  14. Helper()
  15. }
  16. type fatalOs struct {
  17. fatal
  18. }
  19. func (f *fatalOs) must(fn func() error) {
  20. f.Helper()
  21. if err := fn(); err != nil {
  22. f.Fatal(err)
  23. }
  24. }
  25. func (f *fatalOs) Chmod(name string, mode os.FileMode) {
  26. f.Helper()
  27. f.must(func() error { return os.Chmod(name, mode) })
  28. }
  29. func (f *fatalOs) Chtimes(name string, atime time.Time, mtime time.Time) {
  30. f.Helper()
  31. f.must(func() error { return os.Chtimes(name, atime, mtime) })
  32. }
  33. func (f *fatalOs) Create(name string) *os.File {
  34. f.Helper()
  35. file, err := os.Create(name)
  36. if err != nil {
  37. f.Fatal(err)
  38. }
  39. return file
  40. }
  41. func (f *fatalOs) Mkdir(name string, perm os.FileMode) {
  42. f.Helper()
  43. f.must(func() error { return os.Mkdir(name, perm) })
  44. }
  45. func (f *fatalOs) MkdirAll(name string, perm os.FileMode) {
  46. f.Helper()
  47. f.must(func() error { return os.MkdirAll(name, perm) })
  48. }
  49. func (f *fatalOs) Remove(name string) {
  50. f.Helper()
  51. if err := os.Remove(name); err != nil && !os.IsNotExist(err) {
  52. f.Fatal(err)
  53. }
  54. }
  55. func (f *fatalOs) RemoveAll(name string) {
  56. f.Helper()
  57. if err := os.RemoveAll(name); err != nil && !os.IsNotExist(err) {
  58. f.Fatal(err)
  59. }
  60. }
  61. func (f *fatalOs) Rename(oldname, newname string) {
  62. f.Helper()
  63. f.must(func() error { return os.Rename(oldname, newname) })
  64. }
  65. func (f *fatalOs) Stat(name string) os.FileInfo {
  66. f.Helper()
  67. info, err := os.Stat(name)
  68. if err != nil {
  69. f.Fatal(err)
  70. }
  71. return info
  72. }