func Test_Render_NoRace(t *testing.T) { // This test used to fail if run with -race m := martini.Classic() m.Use(Renderer(Options{ Directory: "fixtures/basic", })) // routing m.Get("/foobar", func(r Render) { r.HTML(200, "hello", "world") }) done := make(chan bool) doreq := func() { res := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/foobar", nil) m.ServeHTTP(res, req) expect(t, res.Code, 200) expect(t, res.Header().Get(ContentType), ContentHTML+"; charset=UTF-8") // ContentLength should be deferred to the ResponseWriter and not Render expect(t, res.Header().Get(ContentLength), "") expect(t, res.Body.String(), "<h1>Hello world</h1>\n") done <- true } // Run two requests to check there is no race condition go doreq() go doreq() <-done <-done }
func Test_Render_Funcs(t *testing.T) { m := martini.Classic() m.Use(Renderer(Options{ Directory: "fixtures/custom_funcs", Funcs: []template.FuncMap{ { "myCustomFunc": func() string { return "My custom function" }, }, }, })) // routing m.Get("/foobar", func(r Render) { r.HTML(200, "index", "jeremy") }) res := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/foobar", nil) m.ServeHTTP(res, req) expect(t, res.Body.String(), "My custom function\n") }
func Test_Render_Bad_HTML(t *testing.T) { m := martini.Classic() m.Use(Renderer(Options{ Directory: "fixtures/basic", })) // routing m.Get("/foobar", func(r Render) { r.HTML(200, "nope", nil) }) res := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/foobar", nil) m.ServeHTTP(res, req) expect(t, res.Code, 500) expect(t, res.Body.String(), "html/template: \"nope\" is undefined\n") }
func Test_Render_Layout(t *testing.T) { m := martini.Classic() m.Use(Renderer(Options{ Directory: "fixtures/basic", Layout: "layout", })) // routing m.Get("/foobar", func(r Render) { r.HTML(200, "content", "jeremy") }) res := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/foobar", nil) m.ServeHTTP(res, req) expect(t, res.Body.String(), "head\n<h1>jeremy</h1>\n\nfoot\n") }
func Test_Render_HTML(t *testing.T) { m := martini.Classic() m.Use(Renderer(Options{ Directory: "fixtures/basic", })) // routing m.Get("/foobar", func(r Render) { r.HTML(200, "hello", "jeremy") }) res := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/foobar", nil) m.ServeHTTP(res, req) expect(t, res.Code, 200) expect(t, res.Header().Get(ContentType), ContentHTML+"; charset=UTF-8") expect(t, res.Body.String(), "<h1>Hello jeremy</h1>\n") }
func Test_Render_Charset_JSON(t *testing.T) { m := martini.Classic() m.Use(Renderer(Options{ Charset: "foobar", })) // routing m.Get("/foobar", func(r Render) { r.JSON(300, Greeting{"hello", "world"}) }) res := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/foobar", nil) m.ServeHTTP(res, req) expect(t, res.Code, 300) expect(t, res.Header().Get(ContentType), ContentJSON+"; charset=foobar") expect(t, res.Body.String(), `{"one":"hello","two":"world"}`) }
func Test_Render_BinaryData(t *testing.T) { m := martini.Classic() m.Use(Renderer(Options{ // nothing here to configure })) // routing m.Get("/foobar", func(r Render) { r.Data(200, []byte("hello there")) }) res := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/foobar", nil) m.ServeHTTP(res, req) expect(t, res.Code, 200) expect(t, res.Header().Get(ContentType), ContentBinary) expect(t, res.Body.String(), "hello there") }
func main() { // Set the port via the PORT env var fmt.Println("Running server..") m := martini.Classic() m.Use(render.Renderer(render.Options{ Directory: "templates", Layout: "main", Extensions: []string{".tmpl", ".html"}, Charset: "UTF-8", IndentJSON: true, })) m.Get("/", func(r render.Render) { r.HTML(200, "index", nil) }) m.Get("/spotify", spotifyLogic) m.Post("/spotify", spotifyLogic) m.Run() }
func Test_Render_Extensions(t *testing.T) { m := martini.Classic() m.Use(Renderer(Options{ Directory: "fixtures/basic", Extensions: []string{".tmpl", ".html"}, })) // routing m.Get("/foobar", func(r Render) { r.HTML(200, "hypertext", nil) }) res := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/foobar", nil) m.ServeHTTP(res, req) expect(t, res.Code, 200) expect(t, res.Header().Get(ContentType), ContentHTML+"; charset=UTF-8") expect(t, res.Body.String(), "Hypertext!\n") }
func Test_Render_Override_Layout(t *testing.T) { m := martini.Classic() m.Use(Renderer(Options{ Directory: "fixtures/basic", Layout: "layout", })) // routing m.Get("/foobar", func(r Render) { r.HTML(200, "content", "jeremy", HTMLOptions{ Layout: "another_layout", }) }) res := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/foobar", nil) m.ServeHTTP(res, req) expect(t, res.Code, 200) expect(t, res.Header().Get(ContentType), ContentHTML+"; charset=UTF-8") expect(t, res.Body.String(), "another head\n<h1>jeremy</h1>\n\nanother foot\n") }