apply_test.go (2598B)
1 // Copyright 2019 The Hugo Authors. All rights reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // http://www.apache.org/licenses/LICENSE-2.0 7 // 8 // Unless required by applicable law or agreed to in writing, software 9 // distributed under the License is distributed on an "AS IS" BASIS, 10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package collections 15 16 import ( 17 "context" 18 "fmt" 19 "io" 20 "reflect" 21 "testing" 22 23 qt "github.com/frankban/quicktest" 24 "github.com/gohugoio/hugo/config" 25 "github.com/gohugoio/hugo/deps" 26 "github.com/gohugoio/hugo/langs" 27 "github.com/gohugoio/hugo/output" 28 "github.com/gohugoio/hugo/tpl" 29 ) 30 31 type templateFinder int 32 33 func (templateFinder) Lookup(name string) (tpl.Template, bool) { 34 return nil, false 35 } 36 37 func (templateFinder) HasTemplate(name string) bool { 38 return false 39 } 40 41 func (templateFinder) LookupVariant(name string, variants tpl.TemplateVariants) (tpl.Template, bool, bool) { 42 return nil, false, false 43 } 44 45 func (templateFinder) LookupVariants(name string) []tpl.Template { 46 return nil 47 } 48 49 func (templateFinder) LookupLayout(d output.LayoutDescriptor, f output.Format) (tpl.Template, bool, error) { 50 return nil, false, nil 51 } 52 53 func (templateFinder) Execute(t tpl.Template, wr io.Writer, data any) error { 54 return nil 55 } 56 57 func (templateFinder) ExecuteWithContext(ctx context.Context, t tpl.Template, wr io.Writer, data any) error { 58 return nil 59 } 60 61 func (templateFinder) GetFunc(name string) (reflect.Value, bool) { 62 if name == "dobedobedo" { 63 return reflect.Value{}, false 64 } 65 66 return reflect.ValueOf(fmt.Sprint), true 67 } 68 69 func TestApply(t *testing.T) { 70 t.Parallel() 71 c := qt.New(t) 72 d := &deps.Deps{Language: langs.NewDefaultLanguage(config.New())} 73 d.SetTmpl(new(templateFinder)) 74 ns := New(d) 75 76 strings := []any{"a\n", "b\n"} 77 78 ctx := context.Background() 79 80 result, err := ns.Apply(ctx, strings, "print", "a", "b", "c") 81 c.Assert(err, qt.IsNil) 82 c.Assert(result, qt.DeepEquals, []any{"abc", "abc"}) 83 84 _, err = ns.Apply(ctx, strings, "apply", ".") 85 c.Assert(err, qt.Not(qt.IsNil)) 86 87 var nilErr *error 88 _, err = ns.Apply(ctx, nilErr, "chomp", ".") 89 c.Assert(err, qt.Not(qt.IsNil)) 90 91 _, err = ns.Apply(ctx, strings, "dobedobedo", ".") 92 c.Assert(err, qt.Not(qt.IsNil)) 93 94 _, err = ns.Apply(ctx, strings, "foo.Chomp", "c\n") 95 if err == nil { 96 t.Errorf("apply with unknown func should fail") 97 } 98 }