👷 add ctx.Render test cases

pull/682/head
kiyon 2020-07-29 11:07:47 +08:00
parent 5ee5418b36
commit 7863cd1458
4 changed files with 46 additions and 11 deletions

View File

@ -0,0 +1 @@
<h1>{{.Title}</h1>

11
ctx.go
View File

@ -15,7 +15,6 @@ import (
"log"
"mime/multipart"
"net/http"
"os"
"path/filepath"
"strconv"
"strings"
@ -791,15 +790,7 @@ func (ctx *Ctx) Render(name string, bind interface{}, layouts ...string) (err er
} else {
// Render raw template using 'name' as filepath if no engine is set
var tmpl *template.Template
// Read file
f, err := os.Open(filepath.Clean(name))
if err != nil {
return err
}
if _, err = buf.ReadFrom(f); err != nil {
return err
}
if err = f.Close(); err != nil {
if _, err = readContent(buf, name); err != nil {
return err
}
// Parse template

View File

@ -10,6 +10,7 @@ package fiber
import (
"bufio"
"bytes"
"errors"
"fmt"
"io"
"io/ioutil"
@ -1500,7 +1501,10 @@ func Test_Ctx_Render(t *testing.T) {
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, "<h1>Hello, World!</h1>", string(ctx.Fasthttp.Response.Body()))
err = ctx.Render("./.github/TEST_DATA/invalid.html", nil)
err = ctx.Render("./.github/TEST_DATA/template-non-exists.html", nil)
utils.AssertEqual(t, false, err == nil)
err = ctx.Render("./.github/TEST_DATA/template-invalid.html", nil)
utils.AssertEqual(t, false, err == nil)
}
@ -1533,6 +1537,7 @@ func Test_Ctx_Render_Engine(t *testing.T) {
utils.AssertEqual(t, "<h1>Hello, World!</h1>", string(ctx.Fasthttp.Response.Body()))
}
// go test -v -run=^$ -bench=Benchmark_Ctx_Render_Engine -benchmem -count=4
func Benchmark_Ctx_Render_Engine(b *testing.B) {
engine := &testTemplateEngine{}
err := engine.Load()
@ -1552,19 +1557,43 @@ func Benchmark_Ctx_Render_Engine(b *testing.B) {
utils.AssertEqual(b, "<h1>Hello, World!</h1>", string(ctx.Fasthttp.Response.Body()))
}
type errorTemplateEngine struct{}
func (t errorTemplateEngine) Render(w io.Writer, name string, bind interface{}, layout ...string) error {
return errors.New("errorTemplateEngine")
}
func (t errorTemplateEngine) Load() error { return nil }
// go test -run Test_Ctx_Render_Engine_Error
func Test_Ctx_Render_Engine_Error(t *testing.T) {
app := New()
app.Settings.Views = errorTemplateEngine{}
ctx := app.AcquireCtx(&fasthttp.RequestCtx{})
defer app.ReleaseCtx(ctx)
err := ctx.Render("index.tmpl", nil)
utils.AssertEqual(t, false, err == nil)
}
// go test -run Test_Ctx_Render_Go_Template
func Test_Ctx_Render_Go_Template(t *testing.T) {
t.Parallel()
file, err := ioutil.TempFile(os.TempDir(), "fiber")
utils.AssertEqual(t, nil, err)
defer os.Remove(file.Name())
_, err = file.Write([]byte("template"))
utils.AssertEqual(t, nil, err)
err = file.Close()
utils.AssertEqual(t, nil, err)
app := New()
ctx := app.AcquireCtx(&fasthttp.RequestCtx{})
defer app.ReleaseCtx(ctx)
err = ctx.Render(file.Name(), nil)
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, "template", string(ctx.Fasthttp.Response.Body()))

View File

@ -8,7 +8,10 @@ import (
"bytes"
"fmt"
"hash/crc32"
"io"
"net"
"os"
"path/filepath"
"strings"
"time"
@ -17,6 +20,17 @@ import (
fasthttp "github.com/valyala/fasthttp"
)
// readContent opens a named file and read content from it
func readContent(rf io.ReaderFrom, name string) (int64, error) {
// Read file
f, err := os.Open(filepath.Clean(name))
if err != nil {
return 0, err
}
defer f.Close()
return rf.ReadFrom(f)
}
// quoteString escape special characters in a given string
func quoteString(raw string) string {
bb := bytebufferpool.Get()