hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 4dcb63c2f65608e443aaf99c16019cd1757ee49e
parent 0a8583a4510de749dbc69de9b00eceaedfc0c9c4
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Sun,  7 Feb 2016 15:15:27 +0100

tpl: Add highlight test

Diffstat:
Mtpl/template_funcs.go | 13++++++-------
Mtpl/template_funcs_test.go | 21+++++++++++++++++++++
2 files changed, 27 insertions(+), 7 deletions(-)
diff --git 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("<p>")
diff --git 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)