@@ -16,6 +16,7 @@ import (
16
16
"strings"
17
17
"testing"
18
18
19
+ "github.com/google/go-cmp/cmp"
19
20
"google.golang.org/api/google-api-go-generator/internal/disco"
20
21
"google.golang.org/api/internal"
21
22
)
@@ -44,6 +45,7 @@ func TestAPIs(t *testing.T) {
44
45
"param-rename" ,
45
46
"quotednum" ,
46
47
"repeated" ,
48
+ "repeated_any_query_error" ,
47
49
"required-query" ,
48
50
"resource-named-service" , // appengine/v1/appengine-api.json
49
51
"unfortunatedefaults" ,
@@ -52,6 +54,36 @@ func TestAPIs(t *testing.T) {
52
54
}
53
55
for _ , name := range names {
54
56
t .Run (name , func (t * testing.T ) {
57
+ defer func () {
58
+ r := recover ()
59
+ wantPanic := strings .HasSuffix (name , "_error" )
60
+ if r != nil && ! wantPanic {
61
+ t .Fatal ("unexpected panic" , r )
62
+ }
63
+ if r == nil && ! wantPanic {
64
+ return
65
+ }
66
+ if r == nil && wantPanic {
67
+ t .Fatal ("wanted test to panic, but it didn't" )
68
+ }
69
+
70
+ // compare panic message received vs. desired
71
+ got , ok := r .(string )
72
+ if ! ok {
73
+ gotE , okE := r .(error )
74
+ if ! okE {
75
+ t .Fatalf ("panic with non-string/error input: %v" , r )
76
+ }
77
+ got = gotE .Error ()
78
+ }
79
+ want , err := readOrUpdate (name , got )
80
+ if err != nil {
81
+ t .Fatal (err )
82
+ }
83
+ if diff := cmp .Diff (got , string (want )); diff != "" {
84
+ t .Errorf ("got(-),want(+):\n %s" , diff )
85
+ }
86
+ }()
55
87
api , err := apiFromFile (filepath .Join ("testdata" , name + ".json" ))
56
88
if err != nil {
57
89
t .Fatalf ("Error loading API testdata/%s.json: %v" , name , err )
@@ -60,17 +92,12 @@ func TestAPIs(t *testing.T) {
60
92
if err != nil {
61
93
t .Fatalf ("Error generating code for %s: %v" , name , err )
62
94
}
63
- goldenFile := filepath .Join ("testdata" , name + ".want" )
64
- if * updateGolden {
65
- clean := strings .Replace (string (clean ), fmt .Sprintf ("gdcl/%s" , internal .Version ), "gdcl/00000000" , - 1 )
66
- if err := os .WriteFile (goldenFile , []byte (clean ), 0644 ); err != nil {
67
- t .Fatal (err )
68
- }
69
- }
70
- want , err := os .ReadFile (goldenFile )
95
+
96
+ want , err := readOrUpdate (name , string (clean ))
71
97
if err != nil {
72
98
t .Fatal (err )
73
99
}
100
+
74
101
wantStr := strings .Replace (string (want ), "gdcl/00000000" , fmt .Sprintf ("gdcl/%s" , internal .Version ), - 1 )
75
102
if ! bytes .Equal ([]byte (wantStr ), clean ) {
76
103
tf , _ := os .CreateTemp ("" , "api-" + name + "-got-json." )
@@ -81,12 +108,27 @@ func TestAPIs(t *testing.T) {
81
108
t .Fatal (err )
82
109
}
83
110
// NOTE: update golden files with `go test -update_golden`
84
- t .Errorf ("Output for API %s differs: diff -u %s %s" , name , goldenFile , tf .Name ())
111
+ t .Errorf ("Output for API %s differs: diff -u %s %s" , name , goldenFileName ( name ) , tf .Name ())
85
112
}
86
113
})
87
114
}
88
115
}
89
116
117
+ func readOrUpdate (name , clean string ) ([]byte , error ) {
118
+ goldenFile := goldenFileName (name )
119
+ if * updateGolden {
120
+ clean := strings .Replace (string (clean ), fmt .Sprintf ("gdcl/%s" , internal .Version ), "gdcl/00000000" , - 1 )
121
+ if err := os .WriteFile (goldenFile , []byte (clean ), 0644 ); err != nil {
122
+ return nil , err
123
+ }
124
+ }
125
+ return os .ReadFile (goldenFile )
126
+ }
127
+
128
+ func goldenFileName (name string ) string {
129
+ return filepath .Join ("testdata" , name + ".want" )
130
+ }
131
+
90
132
func TestScope (t * testing.T ) {
91
133
tests := [][]string {
92
134
{
0 commit comments