From 4dcb63c2f65608e443aaf99c16019cd1757ee49e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sun, 7 Feb 2016 15:15:27 +0100 Subject: [PATCH] tpl: Add highlight test --- tpl/template_funcs.go | 13 ++++++------- tpl/template_funcs_test.go | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/tpl/template_funcs.go b/tpl/template_funcs.go index 55b7474a5..f495adf91 100644 --- a/tpl/template_funcs.go +++ b/tpl/template_funcs.go @@ -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("

") diff --git a/tpl/template_funcs_test.go b/tpl/template_funcs_test.go index 8d9eb9e79..3dbfe6204 100644 --- a/tpl/template_funcs_test.go +++ b/tpl/template_funcs_test.go @@ -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)