package main import ( "bytes" "testing" ) func TestPage(t *testing.T) { i := &Index{ Children: map[string]Index{ "foo": { Children: map[string]Index{}, Pages: map[string]Page{ "bar": { Contents: []byte("bar"), }, "index": { Contents: []byte("quuz"), }, }, }, "bar": { Children: map[string]Index{}, Pages: map[string]Page{ "index": { Contents: []byte("quuz"), }, "goof": { Contents: []byte("quuz2"), }, }, }, }, Pages: map[string]Page{ "index": { Contents: []byte("indextest"), }, "foo": { Contents: []byte("rootfoo"), }, }, } p, err := i.Page("") if err != nil { t.Logf("expected no err, received err: %v", err) t.Fail() } if !bytes.Equal(p.Contents, []byte("indextest")) { t.Logf("expected contents to be 'indextest', received '%v'", p.Contents) t.Fail() } p, err = i.Page("/") if err != nil { t.Logf("expected no err, received err: %v", err) t.Fail() } if !bytes.Equal(p.Contents, []byte("indextest")) { t.Logf("expected contents to be 'indextest', received '%v'", p.Contents) t.Fail() } p, err = i.Page("foo/bar") if err != nil { t.Logf("expected no err, received err: %v", err) t.Fail() } if !bytes.Equal(p.Contents, []byte("bar")) { t.Logf("expected contents to be 'bar', received '%v'", p.Contents) t.Fail() } p, err = i.Page("/foo/bar") if err != nil { t.Logf("expected no err, received err: %v", err) t.Fail() } if !bytes.Equal(p.Contents, []byte("bar")) { t.Logf("expected contents to be 'bar', received '%v'", p.Contents) t.Fail() } p, err = i.Page("foo") if err != nil { t.Logf("expected no err, received err: %v", err) t.Fail() } if !bytes.Equal(p.Contents, []byte("rootfoo")) { t.Logf("expected contents to be 'rootfoo', received '%v'", p.Contents) t.Fail() } p, err = i.Page("foo/") if err != nil { t.Logf("expected no err, received err: %v", err) t.Fail() } if !bytes.Equal(p.Contents, []byte("rootfoo")) { t.Logf("expected contents to be 'rootfoo', received '%v'", p.Contents) t.Fail() } p, err = i.Page("bar/") if err != nil { t.Logf("expected no err, received err: %v", err) t.Fail() } if !bytes.Equal(p.Contents, []byte("quuz")) { t.Logf("expected contents to be 'quuz', received '%v'", p.Contents) t.Fail() } p, err = i.Page("bar/goof") if err != nil { t.Logf("expected no err, received err: %v", err) t.Fail() } if !bytes.Equal(p.Contents, []byte("quuz2")) { t.Logf("expected contents to be 'quuz2', received '%v'", p.Contents) t.Fail() } p, err = i.Page("foo/quuz") if err == nil { t.Logf("expected err, received nil err") t.Fail() } if !bytes.Equal(p.Contents, []byte("")) { t.Logf("expected no content, received '%v'", p.Contents) t.Fail() } p, err = i.Page("quuz/bar") if err == nil { t.Logf("expected err, received nil err") t.Fail() } if !bytes.Equal(p.Contents, []byte("")) { t.Logf("expected no content, received '%v'", p.Contents) t.Fail() } p, err = i.Page("//////////") if err == nil { t.Logf("expected err, received nil err") t.Fail() } if !bytes.Equal(p.Contents, []byte("")) { t.Logf("expected no content, received '%v'", p.Contents) t.Fail() } } func TestSave(t *testing.T) { i := &Index{} err := i.Save("/", &Page{Title: "invalid"}) if err == nil { t.Logf("expected err, received nil") } _, err = i.Page("/") if err == nil { t.Logf("expected err, received nil") t.Fail() } err = i.Save("foo", &Page{Title: "fooroot"}) if err != nil { t.Logf("expected no err, received %v", err) } p, err := i.Page("foo") if err != nil { t.Logf("expected no err, received err: %v", err) t.Fail() } if p.Title != "fooroot" { t.Logf("expected title to be 'fooroot', received '%v'", p.Title) t.Fail() } err = i.Save("/foo/", &Page{Title: "fooroot2"}) if err != nil { t.Logf("expected no err, received %v", err) } p, err = i.Page("foo") if err != nil { t.Logf("expected no err, received err: %v", err) t.Fail() } if p.Title != "fooroot2" { t.Logf("expected title to be 'fooroot2', received '%v'", p.Title) t.Fail() } err = i.Save("bar/baz", &Page{Title: "quuz"}) if err != nil { t.Logf("expected no err, received %v", err) } p, err = i.Page("bar/baz") if err != nil { t.Logf("expected no err, received err: %v", err) t.Logf("%+v", i) t.Fail() } if p.Title != "quuz" { t.Logf("expected title to be 'quuz', received '%v'", p.Title) t.Fail() } }