|  | package afero | 
|  |  | 
|  | import ( | 
|  | "regexp" | 
|  | "testing" | 
|  | ) | 
|  |  | 
|  | func TestFilterReadOnly(t *testing.T) { | 
|  | fs := &ReadOnlyFs{source: &MemMapFs{}} | 
|  | _, err := fs.Create("/file.txt") | 
|  | if err == nil { | 
|  | t.Errorf("Did not fail to create file") | 
|  | } | 
|  | // t.Logf("ERR=%s", err) | 
|  | } | 
|  |  | 
|  | func TestFilterReadonlyRemoveAndRead(t *testing.T) { | 
|  | mfs := &MemMapFs{} | 
|  | fh, err := mfs.Create("/file.txt") | 
|  | fh.Write([]byte("content here")) | 
|  | fh.Close() | 
|  |  | 
|  | fs := NewReadOnlyFs(mfs) | 
|  | err = fs.Remove("/file.txt") | 
|  | if err == nil { | 
|  | t.Errorf("Did not fail to remove file") | 
|  | } | 
|  |  | 
|  | fh, err = fs.Open("/file.txt") | 
|  | if err != nil { | 
|  | t.Errorf("Failed to open file: %s", err) | 
|  | } | 
|  |  | 
|  | buf := make([]byte, len("content here")) | 
|  | _, err = fh.Read(buf) | 
|  | fh.Close() | 
|  | if string(buf) != "content here" { | 
|  | t.Errorf("Failed to read file: %s", err) | 
|  | } | 
|  |  | 
|  | err = mfs.Remove("/file.txt") | 
|  | if err != nil { | 
|  | t.Errorf("Failed to remove file") | 
|  | } | 
|  |  | 
|  | fh, err = fs.Open("/file.txt") | 
|  | if err == nil { | 
|  | fh.Close() | 
|  | t.Errorf("File still present") | 
|  | } | 
|  | } | 
|  |  | 
|  | func TestFilterRegexp(t *testing.T) { | 
|  | fs := NewRegexpFs(&MemMapFs{}, regexp.MustCompile(`\.txt$`)) | 
|  | _, err := fs.Create("/file.html") | 
|  | if err == nil { | 
|  |  | 
|  | t.Errorf("Did not fail to create file") | 
|  | } | 
|  | // t.Logf("ERR=%s", err) | 
|  | } | 
|  |  | 
|  | func TestFilterRORegexpChain(t *testing.T) { | 
|  | rofs := &ReadOnlyFs{source: &MemMapFs{}} | 
|  | fs := &RegexpFs{re: regexp.MustCompile(`\.txt$`), source: rofs} | 
|  | _, err := fs.Create("/file.txt") | 
|  | if err == nil { | 
|  | t.Errorf("Did not fail to create file") | 
|  | } | 
|  | // t.Logf("ERR=%s", err) | 
|  | } | 
|  |  | 
|  | func TestFilterRegexReadDir(t *testing.T) { | 
|  | mfs := &MemMapFs{} | 
|  | fs1 := &RegexpFs{re: regexp.MustCompile(`\.txt$`), source: mfs} | 
|  | fs := &RegexpFs{re: regexp.MustCompile(`^a`), source: fs1} | 
|  |  | 
|  | mfs.MkdirAll("/dir/sub", 0777) | 
|  | for _, name := range []string{"afile.txt", "afile.html", "bfile.txt"} { | 
|  | for _, dir := range []string{"/dir/", "/dir/sub/"} { | 
|  | fh, _ := mfs.Create(dir + name) | 
|  | fh.Close() | 
|  | } | 
|  | } | 
|  |  | 
|  | files, _ := ReadDir(fs, "/dir") | 
|  | if len(files) != 2 { // afile.txt, sub | 
|  | t.Errorf("Got wrong number of files: %#v", files) | 
|  | } | 
|  |  | 
|  | f, _ := fs.Open("/dir/sub") | 
|  | names, _ := f.Readdirnames(-1) | 
|  | if len(names) != 1 { | 
|  | t.Errorf("Got wrong number of names: %v", names) | 
|  | } | 
|  | } |