}
// 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>")
"path"
"reflect"
"runtime"
+ "strings"
"testing"
"time"
)
}
}
+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)