예제 #1
0
파일: examples.go 프로젝트: chrisp-fb/rell
// Renders the example content including support for context sensitive
// text substitution.
func (c *exampleContent) Write(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
}
예제 #2
0
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())
	}
}