--- /dev/null
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package mapfs
+
+import (
+ "io/ioutil"
+ "os"
+ "reflect"
+ "testing"
+)
+
+func TestOpenRoot(t *testing.T) {
+ fs := New(map[string]string{
+ "foo/bar/three.txt": "a",
+ "foo/bar.txt": "b",
+ "top.txt": "c",
+ "other-top.txt": "d",
+ })
+ tests := []struct {
+ path string
+ want string
+ }{
+ {"/foo/bar/three.txt", "a"},
+ {"foo/bar/three.txt", "a"},
+ {"foo/bar.txt", "b"},
+ {"top.txt", "c"},
+ {"/top.txt", "c"},
+ {"other-top.txt", "d"},
+ {"/other-top.txt", "d"},
+ }
+ for _, tt := range tests {
+ rsc, err := fs.Open(tt.path)
+ if err != nil {
+ t.Errorf("Open(%q) = %v", tt.path, err)
+ continue
+ }
+ slurp, err := ioutil.ReadAll(rsc)
+ if err != nil {
+ t.Error(err)
+ }
+ if string(slurp) != tt.want {
+ t.Errorf("Read(%q) = %q; want %q", tt.path, tt.want, slurp)
+ }
+ rsc.Close()
+ }
+
+ _, err := fs.Open("/xxxx")
+ if !os.IsNotExist(err) {
+ t.Errorf("ReadDir /xxxx = %v; want os.IsNotExist error", err)
+ }
+}
+
+func TestReaddir(t *testing.T) {
+ fs := New(map[string]string{
+ "foo/bar/three.txt": "333",
+ "foo/bar.txt": "22",
+ "top.txt": "top.txt file",
+ "other-top.txt": "other-top.txt file",
+ })
+ tests := []struct {
+ dir string
+ want []os.FileInfo
+ }{
+ {
+ dir: "/",
+ want: []os.FileInfo{
+ mapFI{name: "foo", dir: true},
+ mapFI{name: "other-top.txt", size: len("other-top.txt file")},
+ mapFI{name: "top.txt", size: len("top.txt file")},
+ },
+ },
+ {
+ dir: "/foo",
+ want: []os.FileInfo{
+ mapFI{name: "bar", dir: true},
+ mapFI{name: "bar.txt", size: 2},
+ },
+ },
+ {
+ dir: "/foo/",
+ want: []os.FileInfo{
+ mapFI{name: "bar", dir: true},
+ mapFI{name: "bar.txt", size: 2},
+ },
+ },
+ {
+ dir: "/foo/bar",
+ want: []os.FileInfo{
+ mapFI{name: "three.txt", size: 3},
+ },
+ },
+ }
+ for _, tt := range tests {
+ fis, err := fs.ReadDir(tt.dir)
+ if err != nil {
+ t.Errorf("ReadDir(%q) = %v", tt.dir, err)
+ continue
+ }
+ if !reflect.DeepEqual(fis, tt.want) {
+ t.Errorf("ReadDir(%q) = %#v; want %#v", tt.dir, fis, tt.want)
+ continue
+ }
+ }
+
+ _, err := fs.ReadDir("/xxxx")
+ if !os.IsNotExist(err) {
+ t.Errorf("ReadDir /xxxx = %v; want os.IsNotExist error", err)
+ }
+}