methods_test.go (2601B)
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 codegen
15
16 import (
17 "fmt"
18 "net"
19 "os"
20 "reflect"
21 "testing"
22
23 qt "github.com/frankban/quicktest"
24 "github.com/gohugoio/hugo/common/herrors"
25 )
26
27 func TestMethods(t *testing.T) {
28 var (
29 zeroIE = reflect.TypeOf((*IEmbed)(nil)).Elem()
30 zeroIEOnly = reflect.TypeOf((*IEOnly)(nil)).Elem()
31 zeroI = reflect.TypeOf((*I)(nil)).Elem()
32 )
33
34 dir, _ := os.Getwd()
35 insp := NewInspector(dir)
36
37 t.Run("MethodsFromTypes", func(t *testing.T) {
38 c := qt.New(t)
39
40 methods := insp.MethodsFromTypes([]reflect.Type{zeroI}, nil)
41
42 methodsStr := fmt.Sprint(methods)
43
44 c.Assert(methodsStr, qt.Contains, "Method1(arg0 herrors.ErrorContext)")
45 c.Assert(methodsStr, qt.Contains, "Method7() interface {}")
46 c.Assert(methodsStr, qt.Contains, "Method0() string\n Method4() string")
47 c.Assert(methodsStr, qt.Contains, "MethodEmbed3(arg0 string) string\n MethodEmbed1() string")
48
49 c.Assert(methods.Imports(), qt.Contains, "github.com/gohugoio/hugo/common/herrors")
50 })
51
52 t.Run("EmbedOnly", func(t *testing.T) {
53 c := qt.New(t)
54
55 methods := insp.MethodsFromTypes([]reflect.Type{zeroIEOnly}, nil)
56
57 methodsStr := fmt.Sprint(methods)
58
59 c.Assert(methodsStr, qt.Contains, "MethodEmbed3(arg0 string) string")
60 })
61
62 t.Run("ToMarshalJSON", func(t *testing.T) {
63 c := qt.New(t)
64
65 m, pkg := insp.MethodsFromTypes(
66 []reflect.Type{zeroI},
67 []reflect.Type{zeroIE}).ToMarshalJSON("*page", "page")
68
69 c.Assert(m, qt.Contains, "method6 := p.Method6()")
70 c.Assert(m, qt.Contains, "Method0: method0,")
71 c.Assert(m, qt.Contains, "return json.Marshal(&s)")
72
73 c.Assert(pkg, qt.Contains, "github.com/gohugoio/hugo/common/herrors")
74 c.Assert(pkg, qt.Contains, "encoding/json")
75
76 fmt.Println(pkg)
77 })
78 }
79
80 type I interface {
81 IEmbed
82 Method0() string
83 Method4() string
84 Method1(myerr herrors.ErrorContext)
85 Method3(myint int, mystring string)
86 Method5() (string, error)
87 Method6() *net.IP
88 Method7() any
89 Method8() herrors.ErrorContext
90 method2()
91 method9() os.FileInfo
92 }
93
94 type IEOnly interface {
95 IEmbed
96 }