ref: daaf4eb3306a89f81cf994071ec4c105d4d1edd0
parent: 80e1fd29ab52a608d3f8359b8775b975bf3b59e5
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Thu Mar 3 14:35:04 EST 2016
tpl: Add integration tests for most of the template funcs examples in doc
--- a/tpl/template_funcs_test.go
+++ b/tpl/template_funcs_test.go
@@ -19,6 +19,7 @@
"errors"
"fmt"
"github.com/spf13/cast"
+ "github.com/spf13/viper"
"github.com/stretchr/testify/assert"
"html/template"
"math/rand"
@@ -54,6 +55,111 @@
func tstIsLt(tp tstCompareType) bool {return tp == tstLt || tp == tstLe
+}
+
+func TestFuncsInTemplate(t *testing.T) {+
+ viper.Reset()
+ defer viper.Reset()
+
+ // Add the examples from the docs: As a smoke test and to make sure the examples work.
+ // TODO(bep): Look at the use of safeHTML below; these should maybe return template.HTML
+ // TODO(bep): docs: fix title example
+ in :=
+ `chomp: {{chomp "<p>Blockhead</p>\n" | safeHTML }}+dateFormat: {{ dateFormat "Monday, Jan 2, 2006" "2015-01-21" }}+lower: {{lower "BatMan"}}+markdownify: {{ .Title | markdownify}}+pluralize: {{ "cat" | pluralize }}+replace: {{ replace "Batman and Robin" "Robin" "Catwoman" }}+singularize: {{ "cats" | singularize }}+slicestr: {{slicestr "BatMan" 3}}+slicestr: {{slicestr "BatMan" 0 3}}+substr: {{substr "BatMan" 0 -3}}+substr: {{substr "BatMan" 3 3}}+title: {{title "Bat man"}}+trim: {{ trim "++Batman--" "+-" }}+upper: {{upper "BatMan"}}+absURL: {{ "mystyle.css" | absURL }}+relURL: {{ "mystyle.css" | relURL }}+relURL: {{ "http://gohugo.io/" | relURL }}+absURL: {{ "http://gohugo.io/" | absURL }}+urlize: {{ "Bat Man" | urlize }}+base64Encode: {{ "Hello world" | base64Encode }}+base64Decode: {{ "SGVsbG8gd29ybGQ=" | base64Decode }}+base64Decode: {{ 42 | base64Encode | base64Decode }}+add: {{add 1 2}}+div: {{div 6 3}}+mod: {{mod 15 3}}+modBool: {{modBool 15 3}}+mul: {{mul 2 3}}+sub: {{sub 3 2}}+eq: {{ if eq .Section "blog" }}current{{ end }}+in: {{ if in "this string contains a substring" "substring" }}Substring found!{{ end }}+seq: {{ seq 3 }}+sort: {{ slice "B" "C" "A" | sort }}+delimit: {{ delimit (slice "A" "B" "C") ", " " and " }}+`
+ expected := `chomp: <p>Blockhead</p>
+dateFormat: Wednesday, Jan 21, 2015
+lower: batman
+markdownify: <strong>BatMan</strong>
+pluralize: cats
+replace: Batman and Catwoman
+singularize: cat
+slicestr: Man
+slicestr: Bat
+substr: Bat
+substr: Man
+title: Bat Man
+trim: Batman
+upper: BATMAN
+absURL: http://mysite.com/hugo/mystyle.css
+relURL: /hugo/mystyle.css
+relURL: http://gohugo.io/
+absURL: http://gohugo.io/
+urlize: bat-man
+base64Encode: SGVsbG8gd29ybGQ=
+base64Decode: Hello world
+base64Decode: 42
+add: 3
+div: 2
+mod: 0
+modBool: true
+mul: 6
+sub: 1
+eq: current
+in: Substring found!
+seq: [1 2 3]
+sort: [A B C]
+delimit: A, B and C
+`
+
+ var b bytes.Buffer
+ templ, err := New().New("test").Parse(in)+ var data struct {+ Title string
+ Section string
+ }
+
+ data.Title = "**BatMan**"
+ data.Section = "blog"
+
+ viper.Set("baseURL", "http://mysite.com/hugo/")+
+ if err != nil {+ t.Fatal("Got error on parse", err)+ }
+
+ err = templ.Execute(&b, &data)
+
+ if err != nil {+ t.Fatal("Gott error on execute", err)+ }
+
+ if b.String() != expected {+ t.Errorf("Got\n%q\nExpected\n>%q<", b.String(), expected)+ }
}
func TestCompare(t *testing.T) {--
⑨