gobot.io/x/gobot/v2@v2.1.0/system/fs_mock_test.go (about) 1 package system 2 3 import ( 4 "sort" 5 "testing" 6 7 "gobot.io/x/gobot/v2/gobottest" 8 ) 9 10 func TestMockFilesystemOpen(t *testing.T) { 11 fs := newMockFilesystem([]string{"foo"}) 12 f1 := fs.Files["foo"] 13 14 gobottest.Assert(t, f1.Opened, false) 15 f2, err := fs.openFile("foo", 0, 0666) 16 gobottest.Assert(t, f1, f2) 17 gobottest.Assert(t, err, nil) 18 19 err = f2.Sync() 20 gobottest.Assert(t, err, nil) 21 22 _, err = fs.openFile("bar", 0, 0666) 23 gobottest.Assert(t, err.Error(), " : bar: no such file") 24 25 fs.Add("bar") 26 f4, _ := fs.openFile("bar", 0, 0666) 27 gobottest.Refute(t, f4.Fd(), f1.Fd()) 28 } 29 30 func TestMockFilesystemStat(t *testing.T) { 31 fs := newMockFilesystem([]string{"foo", "bar/baz"}) 32 33 fileStat, err := fs.stat("foo") 34 gobottest.Assert(t, err, nil) 35 gobottest.Assert(t, fileStat.IsDir(), false) 36 37 dirStat, err := fs.stat("bar") 38 gobottest.Assert(t, err, nil) 39 gobottest.Assert(t, dirStat.IsDir(), true) 40 41 _, err = fs.stat("plonk") 42 gobottest.Assert(t, err.Error(), " : plonk: no such file") 43 } 44 45 func TestMockFilesystemFind(t *testing.T) { 46 // arrange 47 fs := newMockFilesystem([]string{"/foo", "/bar/foo", "/bar/foo/baz", "/bar/baz/foo", "/bar/foo/bak"}) 48 var tests = map[string]struct { 49 baseDir string 50 pattern string 51 want []string 52 }{ 53 "flat": {baseDir: "/", pattern: "foo", want: []string{"/foo"}}, 54 "in directory no slash": {baseDir: "/bar", pattern: "foo", want: []string{"/bar/foo", "/bar/foo", "/bar/foo"}}, 55 "file": {baseDir: "/bar/baz/", pattern: "foo", want: []string{"/bar/baz/foo"}}, 56 "file pattern": {baseDir: "/bar/foo/", pattern: "ba.?", want: []string{"/bar/foo/bak", "/bar/foo/baz"}}, 57 "empty": {baseDir: "/", pattern: "plonk", want: nil}, 58 } 59 for name, tt := range tests { 60 t.Run(name, func(t *testing.T) { 61 // act 62 dirs, err := fs.find(tt.baseDir, tt.pattern) 63 // assert 64 gobottest.Assert(t, err, nil) 65 sort.Strings(dirs) 66 gobottest.Assert(t, dirs, tt.want) 67 }) 68 } 69 } 70 71 func TestMockFilesystemWrite(t *testing.T) { 72 fs := newMockFilesystem([]string{"bar"}) 73 f1 := fs.Files["bar"] 74 75 f2, err := fs.openFile("bar", 0, 0666) 76 gobottest.Assert(t, err, nil) 77 // Never been read or written. 78 gobottest.Assert(t, f1.Seq <= 0, true) 79 80 f2.WriteString("testing") 81 // Was written. 82 gobottest.Assert(t, f1.Seq > 0, true) 83 gobottest.Assert(t, f1.Contents, "testing") 84 } 85 86 func TestMockFilesystemRead(t *testing.T) { 87 fs := newMockFilesystem([]string{"bar"}) 88 f1 := fs.Files["bar"] 89 f1.Contents = "Yip" 90 91 f2, err := fs.openFile("bar", 0, 0666) 92 gobottest.Assert(t, err, nil) 93 // Never been read or written. 94 gobottest.Assert(t, f1.Seq <= 0, true) 95 96 buffer := make([]byte, 20) 97 n, _ := f2.Read(buffer) 98 99 // Was read. 100 gobottest.Assert(t, f1.Seq > 0, true) 101 gobottest.Assert(t, n, 3) 102 gobottest.Assert(t, string(buffer[:3]), "Yip") 103 104 n, _ = f2.ReadAt(buffer, 10) 105 gobottest.Assert(t, n, 3) 106 }