// Renders the example content including support for context sensitive // text substitution. func (c *exampleContent) Write(ctx context.Context, w io.Writer) (int, error) { e := c.Example wwwURL := fburl.URL{ Env: rellenv.FbEnv(c.Context), } w = htmlwriter.New(w) tpl, err := template.New("example-" + e.URL).Parse(string(e.Content)) if err != nil { // if template parsing fails, we ignore it. it's probably malformed html return fmt.Fprint(w, e.Content) } countingW := counting.NewWriter(w) err = tpl.Execute(countingW, struct { Rand string // a random token RellFBNS string // the OG namespace RellURL string // local http://www.fbrell.com/ URL WwwURL string // server specific http://www.facebook.com/ URL }{ Rand: randString(10), RellFBNS: rellenv.FbApp(c.Context).Namespace(), RellURL: c.Env.AbsoluteURL("/").String(), WwwURL: wwwURL.String(), }) if err != nil { // if template execution fails, we ignore it. it's probably malformed html return fmt.Fprint(w, e.Content) } return countingW.Count(), err }
func TestWriter(t *testing.T) { const payload = "hello world" buf := bytes.NewBuffer(nil) countingW := counting.NewWriter(buf) fmt.Fprint(countingW, payload) if countingW.Count() != len(payload) { t.Fatalf("did not get expected count") } if buf.String() != payload { t.Fatalf("did not get expected payload: %s", buf.String()) } }