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 := &ReadOnlyFs{source: 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 := &RegexpFs{re: regexp.MustCompile(`\.txt$`), source: &MemMapFs{}} _, 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) } }