// Copyright 2016 The Hugo Authors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package hugolib import ( "fmt" "path/filepath" "reflect" "regexp" "sort" "strings" "testing" "github.com/spf13/hugo/helpers" "github.com/spf13/hugo/hugofs" "github.com/spf13/hugo/source" "github.com/spf13/hugo/target" "github.com/spf13/hugo/tpl" "github.com/spf13/viper" ) func pageFromString(in, filename string) (*Page, error) { return NewPageFrom(strings.NewReader(in), filename) } func CheckShortCodeMatch(t *testing.T, input, expected string, template tpl.Template) { CheckShortCodeMatchAndError(t, input, expected, template, false) } func CheckShortCodeMatchAndError(t *testing.T, input, expected string, template tpl.Template, expectError bool) { p, _ := pageFromString(simplePage, "simple.md") output, err := HandleShortcodes(input, p, template) if err != nil && !expectError { t.Fatalf("Shortcode rendered error %s. Expected: %q, Got: %q", err, expected, output) } if err == nil && expectError { t.Fatalf("No error from shortcode") } if output != expected { t.Fatalf("Shortcode render didn't match. got \n%q but expected \n%q", output, expected) } } func TestShortcodeGoFuzzReports(t *testing.T) { tem := tpl.New() tem.AddInternalShortcode("sc.html", `foo`) p, _ := pageFromString(simplePage, "simple.md") for i, this := range []struct { data string expectErr bool }{ {"{{}}", "Playing Video 47238zzb", tem) } // Issue #1753 func TestNoTrailingNewline(t *testing.T) { tem := tpl.New() tem.AddInternalShortcode("a.html", `{{ .Get 0 }}`) CheckShortCodeMatch(t, "ab{{< a c >}}d", "abcd", tem) } func TestPositionalParamSC(t *testing.T) { tem := tpl.New() tem.AddInternalShortcode("video.html", `Playing Video {{ .Get 0 }}`) CheckShortCodeMatch(t, "{{< video 47238zzb >}}", "Playing Video 47238zzb", tem) CheckShortCodeMatch(t, "{{< video 47238zzb 132 >}}", "Playing Video 47238zzb", tem) CheckShortCodeMatch(t, "{{