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  }