tpl: Add highlight test
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 7 Feb 2016 14:15:27 +0000 (15:15 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 7 Feb 2016 14:15:27 +0000 (15:15 +0100)
tpl/template_funcs.go
tpl/template_funcs_test.go

index 55b7474a546be16a1a09025f2e4d7b0ea0403c14..f495adf91c3b7fef4905e9ba1fd497ba9be76ef7 100644 (file)
@@ -1132,15 +1132,14 @@ func returnWhenSet(a, k interface{}) interface{} {
 }
 
 // highlight returns an HTML string with syntax highlighting applied.
-func highlight(in interface{}, lang, opts string) template.HTML {
-       var str string
-       av := reflect.ValueOf(in)
-       switch av.Kind() {
-       case reflect.String:
-               str = av.String()
+func highlight(in interface{}, lang, opts string) (template.HTML, error) {
+       str, err := cast.ToStringE(in)
+
+       if err != nil {
+               return "", err
        }
 
-       return template.HTML(helpers.Highlight(html.UnescapeString(str), lang, opts))
+       return template.HTML(helpers.Highlight(html.UnescapeString(str), lang, opts)), nil
 }
 
 var markdownTrimPrefix = []byte("<p>")
index 8d9eb9e794f863f7fbbd16b2dd0188289bc6e9fe..3dbfe62045d92f187b9a47161cb956f2d46bb8a9 100644 (file)
@@ -25,6 +25,7 @@ import (
        "path"
        "reflect"
        "runtime"
+       "strings"
        "testing"
        "time"
 )
@@ -1533,6 +1534,26 @@ func TestChomp(t *testing.T) {
        }
 }
 
+func TestHighlight(t *testing.T) {
+       code := "func boo() {}"
+       highlighted, err := highlight(code, "go", "")
+
+       if err != nil {
+               t.Fatal("Highlight returned error:", err)
+       }
+
+       // this depends on a Pygments installation, but will always contain the function name.
+       if !strings.Contains(string(highlighted), "boo") {
+               t.Errorf("Highlight mismatch,  got %v", highlighted)
+       }
+
+       _, err = highlight(t, "go", "")
+
+       if err == nil {
+               t.Error("Expected highlight error")
+       }
+}
+
 func TestInflect(t *testing.T) {
        for i, this := range []struct {
                inflectFunc func(i interface{}) (string, error)