-
Notifications
You must be signed in to change notification settings - Fork 275
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added gotest templates, changed unit test naming (#1621)
* Added gotest templates, changed unit test naming Signed-off-by: dereknola <[email protected]>
- Loading branch information
Showing
10 changed files
with
240 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{{define "call"}}{{with .Receiver}}{{if not .IsStruct}}tt.{{end}}{{Receiver .}}.{{end}}{{.Name}}({{range $i, $el := .Parameters}}{{if $i}}, {{end}}{{if not .IsWriter}}tt.args.{{end}}{{Param .}}{{if .Type.IsVariadic}}...{{end}}{{end}}){{end}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
{{define "function"}} | ||
{{- $f := .}} | ||
|
||
func Test_Unit{{.FullName}}(t *testing.T) { | ||
{{- with .Receiver}} | ||
{{- if .IsStruct}} | ||
{{- if .Fields}} | ||
type fields struct { | ||
{{- range .Fields}} | ||
{{Field .}} {{.Type}} | ||
{{- end}} | ||
} | ||
{{- end}} | ||
{{- end}} | ||
{{- end}} | ||
{{- if .TestParameters}} | ||
type args struct { | ||
{{- range .TestParameters}} | ||
{{Param .}} {{.Type}} | ||
{{- end}} | ||
} | ||
{{- end}} | ||
tests := []struct { | ||
name string | ||
{{- with .Receiver}} | ||
{{- if and .IsStruct .Fields}} | ||
fields fields | ||
{{- else}} | ||
{{Receiver .}} {{.Type}} | ||
{{- end}} | ||
{{- end}} | ||
{{- if .TestParameters}} | ||
args args | ||
{{- end}} | ||
setup func() error // Optional, delete if unused | ||
teardown func() error // Optional, delete if unused | ||
{{- range .TestResults}} | ||
{{Want .}} {{.Type}} | ||
{{- end}} | ||
{{- if .ReturnsError}} | ||
wantErr bool | ||
{{- end}} | ||
}{ | ||
// TODO: Add test cases. | ||
// { | ||
// name: "Example Test", | ||
// args: args { | ||
// }, | ||
// {{- range .TestResults}} | ||
// want: {{Want .}} {{.Type}} | ||
// {{- end}} | ||
// setup: func() error { return nil }, | ||
// teardown: func() error { return nil }, | ||
// }, | ||
} | ||
for {{if (or .Subtests (not .IsNaked))}} _, tt := {{end}} range tests { | ||
{{- if .Subtests}} | ||
{{- if .Parallel}}tt := tt{{end}} | ||
t.Run(tt.name, func(t *testing.T) { | ||
{{- if .Parallel}}t.Parallel(){{end}} | ||
{{- end}} | ||
{{- with .Receiver}} | ||
{{- if .IsStruct}} | ||
{{Receiver .}} := {{if .Type.IsStar}}&{{end}}{{.Type.Value}}{ | ||
{{- range .Fields}} | ||
{{.Name}}: tt.fields.{{Field .}}, | ||
{{- end}} | ||
} | ||
{{- end}} | ||
{{- end}} | ||
{{- range .Parameters}} | ||
{{- if .IsWriter}} | ||
{{Param .}} := &bytes.Buffer{} | ||
{{- end}} | ||
{{- end}} | ||
defer tt.teardown() | ||
if err := tt.setup(); err != nil { | ||
t.Errorf("Setup for {{template "message" $f}} failed = %v", err) | ||
return | ||
} | ||
{{- if and (not .OnlyReturnsError) (not .OnlyReturnsOneValue) }} | ||
{{template "results" $f}} {{template "call" $f}} | ||
{{- end}} | ||
{{- if .ReturnsError}} | ||
if {{if .OnlyReturnsError}} err := {{template "call" $f}}; {{end}} (err != nil) != tt.wantErr { | ||
t.Errorf("{{template "message" $f}} error = %v, wantErr %v", {{template "inputs" $f}} err, tt.wantErr) | ||
{{- if .TestResults}} | ||
{{if .Subtests }}return{{else}}continue{{end}} | ||
{{- end}} | ||
} | ||
{{- end}} | ||
{{- range .TestResults}} | ||
{{- if .IsWriter}} | ||
if {{Got .}} := {{Param .}}.String(); {{Got .}} != tt.{{Want .}} { | ||
{{- else if .IsBasicType}} | ||
if {{if $f.OnlyReturnsOneValue}}{{Got .}} := {{template "inline" $f}}; {{end}} {{Got .}} != tt.{{Want .}} { | ||
{{- else}} | ||
if {{if $f.OnlyReturnsOneValue}}{{Got .}} := {{template "inline" $f}}; {{end}} !reflect.DeepEqual({{Got .}}, tt.{{Want .}}) { | ||
{{- end}} | ||
t.Errorf("{{template "message" $f}} {{if $f.ReturnsMultiple}}{{Got .}} {{end}}= %+v\nWant = %+v", {{template "inputs" $f}} {{Got .}}, tt.{{Want .}}) | ||
} | ||
{{- end}} | ||
{{- if .Subtests }} }) {{- end -}} | ||
} | ||
} | ||
|
||
{{end}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
{{define "header"}} | ||
{{range .Comments}}{{.}} | ||
{{end -}} | ||
package {{.Package}} | ||
|
||
import ( | ||
{{range .Imports}}{{.Name}} {{.Path}} | ||
{{end}} | ||
) | ||
{{end}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{{define "inline"}} {{template "call" .}} {{end}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{{define "inputs"}}{{$f := .}}{{if not .Subtests}}tt.name, {{end}}{{if $f.PrintInputs}}{{range $f.Parameters}}tt.args.{{Param .}}, {{end}}{{end}}{{end}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{{define "message" -}} | ||
{{if not .Subtests}}%q. {{end}}{{with .Receiver}}{{.Type.Value}}.{{end}}{{.Name}}({{if .PrintInputs}}{{range $i, $el := .Parameters}}{{if $i}}, {{end}}%v{{end}}{{end}}) | ||
{{- end}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{{define "results"}} {{range $i, $el := .Results}}{{if $i}}, {{end}}{{Got .}}{{end}}{{if .ReturnsError}}, err{{end}} {{if or .Results .ReturnsError}} := {{end}} {{end}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
package images | ||
|
||
import ( | ||
"io/ioutil" | ||
"os" | ||
"testing" | ||
|
||
"github.com/google/go-containerregistry/pkg/name" | ||
) | ||
|
||
func Test_UnitPull(t *testing.T) { | ||
type args struct { | ||
dir string | ||
name string | ||
image name.Reference | ||
} | ||
tests := []struct { | ||
name string | ||
args args | ||
setup func(a *args) error | ||
teardown func(a *args) error | ||
wantTxtFile bool | ||
wantErr bool | ||
}{ | ||
{ | ||
name: "Pull with no directory", | ||
args: args{ | ||
name: KubeScheduler, | ||
}, | ||
setup: func(a *args) error { return nil }, | ||
teardown: func(a *args) error { return nil }, | ||
}, | ||
{ | ||
name: "Pull with nonexistent directory", | ||
args: args{ | ||
dir: "/tmp/DEADBEEF", | ||
name: KubeScheduler, | ||
}, | ||
setup: func(a *args) error { | ||
var err error | ||
a.image, err = getDefaultImage(KubeScheduler) | ||
return err | ||
}, | ||
teardown: func(a *args) error { | ||
return os.RemoveAll(a.dir) | ||
}, | ||
|
||
wantTxtFile: true, | ||
}, | ||
{ | ||
name: "Pull with no image in directory", | ||
args: args{ | ||
name: KubeScheduler, | ||
}, | ||
setup: func(a *args) error { | ||
var err error | ||
a.image, err = getDefaultImage(KubeScheduler) | ||
if err != nil { | ||
return err | ||
} | ||
a.dir, err = os.MkdirTemp("", "*") | ||
return err | ||
}, | ||
teardown: func(a *args) error { | ||
return os.RemoveAll(a.dir) | ||
}, | ||
|
||
wantTxtFile: true, | ||
}, | ||
{ | ||
name: "Pull with fake image in directory", | ||
args: args{ | ||
name: "kube-scheduler", | ||
}, | ||
setup: func(a *args) error { | ||
var err error | ||
a.image, err = getDefaultImage(KubeScheduler) | ||
if err != nil { | ||
return err | ||
} | ||
a.dir, err = os.MkdirTemp("", "*") | ||
tempImage := a.dir + "/" + a.name + ".image" | ||
ioutil.WriteFile(tempImage, []byte(a.image.Name()+"\n"), 0644) | ||
return err | ||
}, | ||
teardown: func(a *args) error { | ||
return os.RemoveAll(a.dir) | ||
}, | ||
}, | ||
} | ||
for _, tt := range tests { | ||
t.Run(tt.name, func(t *testing.T) { | ||
|
||
if err := tt.setup(&tt.args); err != nil { | ||
t.Errorf("Setup for Pull() failed = %v", err) | ||
} | ||
if err := Pull(tt.args.dir, tt.args.name, tt.args.image); (err != nil) != tt.wantErr { | ||
t.Errorf("Pull() error = %v, wantErr %v", err, tt.wantErr) | ||
} | ||
if tt.wantTxtFile { | ||
fileName := tt.args.name + ".txt" | ||
if _, err := os.Stat(tt.args.dir + "/" + fileName); os.IsNotExist(err) { | ||
t.Errorf("File generate by Pull() %s, does not exists, wantFile %v", fileName, tt.wantTxtFile) | ||
} | ||
} | ||
if err := tt.teardown(&tt.args); err != nil { | ||
t.Errorf("Teardown for Pull() failed = %v", err) | ||
} | ||
}) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters